커널에 의해 어떤 프로세스가 종료되었는지 확인할 수 있는 방법이 있습니까? 때때로 내 서버에 로그인하여 밤새도록 실행되어야 했던 작업이 8시간 후에 중지되는 경우가 있는데, 이를 수행하는 것이 애플리케이션인지 커널인지 확실하지 않습니다.
답변1
커널이 프로세스를 종료하는 경우(시스템 메모리 부족으로 인해) 커널 로그 메시지가 표시됩니다. 체크인 /var/log/kern.log
(Debian/Ubuntu에서 다른 배포판은 커널 로그를 다른 파일로 보낼 수 있지만 일반적으로 /var/log
Linux에서).
OOM-killer(Out of Memory Killer)가 실행되면 가상 메모리가 부족하다는 의미입니다. 스왑 공간(또는 RAM)을 더 추가하세요.
일부 프로세스 충돌은 커널 로그에도 기록됩니다(예: 분할 오류).
프로세스가 cron에서 시작된 경우 오류 메시지가 포함된 이메일을 받아야 합니다. 프로세스가 터미널의 셸에서 시작된 경우 터미널에 오류가 있는지 확인하세요. screen
아침에 터미널을 다시 보려면 프로세스를 실행하세요 . OOM 킬러가 트리거되면 크론이나 화면 프로세스도 종료될 수 있으므로 도움이 되지 않을 수 있습니다. 하지만 OOM 킬러가 있는 경우 이를 수정해야 합니다.
답변2
여기서 프로세스 회계가 도움이 될 수 있습니다.
간단히 말해서:
apt-get install acct
그런 다음 다음 명령을 시도해 보십시오.
lastcomm
sa
또는 우분투에서:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
바라보다:
- http://tldp.org/HOWTO/Process-Accounting/pasetup.html
- http://tldp.org/HOWTO/Process-Accounting/misccommands.html
고쳐 쓰다
이상하게도 pacct
파일에는 종료 상태에 대한 정보가 포함되어 있지만 이를 인쇄하지도 않고 표시 lastcomm
하지도 않습니다 .sa
내가 아는 한, 이 정보에 접근하려면 자신만의 C 프로그램을 작성해야 합니다.
업데이트 2
종료 코드를 인쇄하는 버전입니다.
마지막 두 필드는 "S"(신호용) 및 "E"(종료용)이고 그 뒤에 신호 번호 또는 종료 상태가 옵니다.
따라서 귀하의 경우에는 아마도 SIGTERM이 있음을 의미하는 "S 15"를 찾고 있을 것입니다.
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15
"E 0"과 비교하면 프로세스가 오류 없이 종료되었음을 의미합니다.
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
최소한의 테스트만 수행되었습니다.
답변3
sudo 서비스 --status-all
이 명령은 현재 실행 중인 서비스와 시작되거나 중지되지 않은 서비스를 알려줍니다.