내가 방금 죽인 것이 무엇인지 알 수 있는 방법이 있나요?
$ 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
(최신 것부터) 가장 최근에 종료된 프로세스를 보려면 루트 권한이 필요할 수 있습니다. 를 사용하면 lastcomm
PID나 인수가 아닌 명령 이름만 추적됩니다. 환경 일치를 통해 어떤 프로세스인지 알아내야 합니다. 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라는 파일이 생성됩니다.