내가 방금 뭘 죽였지?

내가 방금 뭘 죽였지?

내가 방금 죽인 것이 무엇인지 알 수 있는 방법이 있나요?

$ ps -A -o pid,cmd | grep someApp | grep -v grep
2802 python someApp.py
$ sudo kill 2302
$

편집하다:명확히 하려면 PID 2302를 종료하기 전에 PID 2302가 무엇인지 알아야 합니다. 이 ps인용문은 내가 그것이 무엇인지도 모르는 채 2302를 어떻게 죽였는지 설명하기 위한 것입니다.

답변1

알 수 있는 보편적인 방법은 없지만 단서가 있을 수 있습니다.

KILL 신호 대신 TERM 신호를 보냈으므로 프로그램이 신호 처리기를 실행할 기회를 가졌습니다. 전혀 죽지 않았을 수도 있고, 어딘가에 로그 항목을 남겼을 수도 있습니다. 프로세스가 아직 실행 중인지( ps 2302) 확인하고, 그렇지 않은 경우 시스템 로그를 확인하세요.

가능한 경우 모든 프로세스에 대한 로그가 있습니다.프로세스 회계활성화되었습니다. 이 작업은 Linux에서 다음을 통해 수행할 수 있습니다.GNU 계정, 그러나 대부분의 배포판에서는 이 패키지가 기본적으로 설치되지 않습니다. 프로세스 계정이 활성화된 경우 다음을 실행합니다.lastcomm(최신 것부터) 가장 최근에 종료된 프로세스를 보려면 루트 권한이 필요할 수 있습니다. 를 사용하면 lastcommPID나 인수가 아닌 명령 이름만 추적됩니다. 환경 일치를 통해 어떤 프로세스인지 알아내야 합니다. Linux에서는 lastcomm프로세스가 종료된 날짜가 표시되지만 1분 단위로 표시되며 X명령이 신호에 의해 종료된 경우 명령 이름 뒤에 플래그가 있습니다.

GNU acct는 프로세스 ID를 포함한 추가 정보를 추적하지만 lastcomm명령은 이를 표시하지 않습니다. 다음을 실행해야 합니다.dump-acct, 불행하게도 명령이 신호에 의해 종료되었는지 여부는 나타내지 않습니다.

dump-acct /var/log/account/pacct | awk -F '|' '$10 ~ / *2302($| )/'

Linux 감사와 같이 프로세스를 기록할 수 있는 다른 하위 시스템도 있지만 일반적으로 그렇게 하도록 구성되어 있지 않습니다.

답변2

시스템에 생성된 모든 프로세스(예: 감사 또는 프로세스 계정)를 기록하는 방법을 사용하지 않는 한 확실한 방법은 없습니다.

이제 시도해 볼 수 있는 사항은 다음과 같습니다.

  • 프로세스는 pid를 포함하여 (syslog 등을 통해) 내용을 기록할 수 있으므로 zgrep -w 2302 /var/log/**/*(.m-1)이를 식별하기 위해 (zsh 구문)을 수행할 수 있습니다.
  • 해당 프로세스 또는 해당 상위 프로세스가 프로세스 종료를 보고하기 위해 무언가를 기록했을 수 있습니다. 종료 이후 수정된 파일을 보고 단서가 있는지 확인할 수 있습니다( .xsession-errors그래픽으로 로그인한 각 사용자에 대해 /다시 var/를 확인하세요). 로그, 출력을 보고 lsof -nP현재 열려 있는 로그 파일과 유사한 항목이 있는지 확인하십시오...)...
  • 머신에 생성된 프로세스가 많지 않은 경우 2302에 가까운 pid와 시작 시간을 확인하세요. 2302는 부모나 자식일 수도 있고, 어떤 사용자가 그것을 생성했는지 나타낼 수 있는 관련 명령일 수도 있습니다.
  • 일부 사용자의 단말기에서 생성된 경우, 어떤 단말기의 수정 시간이 종료 시간과 일치하는지 확인할 수 /dev있어 검색 범위를 다시 좁히는 데 도움이 될 수 있습니다.

답변3

아니요, 없습니다. 나중에는 그렇지 않습니다.

그러나 kill 명령 이전에 "ps -A > list"를 수행하면 프로세스를 종료하기 전에 실행 중이던 모든 프로세스 목록이 포함된 list라는 파일이 생성됩니다.

관련 정보