killall 매뉴얼 페이지에서
killall은 지정된 명령을 실행하는 모든 프로세스에 신호를 보냅니다. 신호 이름을 지정하지 않으면 SIGTERM이 전송됩니다.
을 수행 kill -9
하면 SIGKILL 신호가 전송됩니다. killall과 함께 SIGKILL을 보내려면해야합니다.
killall -s SIGKILL <PROCESSNAME>
SIGKILL과 SIGTERM의 차이점에 대한 좋은 설명 (그리고 SIGTERM을 먼저 시도 해야하는 이유)
에서 http://rackerhacker.com/2010/03/18/sigterm-vs-sigkill/
유닉스 시스템에서 kill을 사용하여 프로세스에 신호를 보내는 것은 대부분의 시스템 관리자에게는 새로운 주제가 아니지만 kill과 kill -9의 차이점에 대해 여러 번 질문을 받았습니다.
프로세스에서 kill을 사용할 때마다 실제로 프로세스에 신호를 전송합니다 (거의 모든 상황에서 곧 시작하겠습니다). 표준 C 애플리케이션에는 특정 신호를 수신 할 때 프로세스가 따라야하는 단계가 포함 된 헤더 파일이 있습니다. 매뉴얼 페이지에서 kill을 확인하여 시스템에서 사용 가능한 전체 신호 목록을 얻을 수 있습니다.
다음과 같은 명령을 고려하십시오.
kill 2563
이는 프로세스에 SIGTERM이라는 신호를 보냅니다. 프로세스가 알림을 받으면 몇 가지 다른 일이 발생할 수 있습니다.
- 프로세스가 즉시 중단 될 수 있습니다
- 리소스 정리 후 짧은 지연 후에 프로세스가 중지 될 수 있음
- 프로세스가 무한정 계속 실행될 수 있습니다
응용 프로그램은 SIGTERM이 수신되면 원하는 작업을 결정할 수 있습니다. 대부분의 응용 프로그램은 리소스를 정리하고 중지하지만 일부 응용 프로그램은 그렇지 않을 수 있습니다. 응용 프로그램은 SIGTERM이 수신 될 때 완전히 다른 것을 수행하도록 구성 될 수 있습니다. 또한 응용 프로그램이 디스크 I / O 대기와 같은 잘못된 상태 인 경우 전송 된 신호에 대해 작동하지 않을 수 있습니다.
대부분의 시스템 관리자는 일반적으로 응용 프로그램이 SIGTERM에 응답하지 않을 때 더 갑작스러운 신호에 의존합니다.
kill -9 2563
-9는 kill 명령에 신호 # 9 (SIGKILL)를 보내도록 지시합니다. 그런 이름으로이 신호가 조금 더 무게를가한다는 것은 명백합니다.
SIGKILL은 SIGTERM과 동일한 신호 헤더 파일에 정의되어 있지만 프로세스에서 무시할 수는 없습니다. 실제로, 신호는 커널 초기화로 바로 이동하기 때문에 프로세스는 SIGKILL 신호를 인식하지 못합니다. 이 시점에서 init는 프로세스를 중지합니다. 프로세스는 신호를 포착하고 그에 따라 행동 할 기회를 얻지 못합니다.
그러나 일부 상황에서는 커널이 프로세스를 성공적으로 종료하지 못할 수 있습니다. 프로세스가 네트워크 또는 디스크 I / O를 기다리고있는 경우 커널은이를 중지 할 수 없습니다. 무정전 수면 상태에 빠진 좀비 프로세스와 프로세스는 커널에 의해 중지 될 수 없습니다. 시스템에서 해당 프로세스를 지우려면 재부팅해야합니다.
killall (SIGTERM)을 썬더 버드 프로세스로 보냈을 때 해당 프로세스 중지를 요청했습니다. 이러한 프로세스 중 일부가 제대로 작동하지 않았기 때문에 (아마도 처음에 프로세스를 종료해야하는 이유) SIGTERM 신호에 대해 작동 할 수 없었습니다.