kill 명령에서 -9 옵션의 목적은 무엇입니까?


답변:


28

우분투 매뉴얼 페이지 kill-9스위치 의 목적 을 설명합니다 (물론 다소 고르지 않은 방식으로).

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

다른 매뉴얼 페이지 의 내용은 다음과 같습니다 .

명령 kill은 지정된 신호를 지정된 프로세스 또는 프로세스 그룹으로 보냅니다. 신호가 지정되지 않으면 TERM신호가 전송됩니다. TERM신호는이 신호를 프로세스를 종료시킬 것이다. 다른 프로세스의 경우이 신호를 포착 할 수 없으므로 KILL( 9) 신호 를 사용해야 할 수도 있습니다 .


따라서 -9스위치를 사용하면 프로세스가 효과적으로 종료됩니다. 정지되거나 응답이없는 프로세스가 간단한 TERM 신호에 응답하지 않더라도 신호를 보내면 프로세스가 종료 됩니다 KILL.


40

명령은 정의 보내드립니다 신호를 주어진 정체성 (PID)와 프로세스 :

kill -<signal> <pid>

물론 우리는 우리가 소유 한 프로세스 만 죽일 수 있지만, 루트는 모든 프로세스를 죽일 수 있습니다. 컴퓨팅 신호에 대한 요약 정보는 Wikipedia 를 참조하십시오 .

kill보낼 수있는 신호 는 맨 페이지에 나와 있습니다 . 신호는 이름 또는 번호로 표시 할 수 있습니다. 신호가 제공되지 않으면 기본 신호 15 resp. TERM사용.

따라서 아래의 세 가지 명령은 모두 동일합니다.

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

응용 프로그램이 신호에서 작동하는 방식 SIGTERM과 차이점은 다음 과 SIGKILL같습니다.

  • TERM: 응용 프로그램을 종료 할 수 있습니다 (예 : 종료 루틴을 올바르게 실행).
  • KILL: 응용 프로그램이 즉시 중지되고 종료됩니다 (일부 경우 추정되는 충돌을보고하기 위해 데이터가 손실되거나 apport가 발생할 수 있음).

16

다음은 모두 동의어입니다.

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

신호 처리의 세계에서 SIGKILL 은 프로그램이 아닌 운영 체제에서 처리하는 몇 가지 고유 한 것 중 하나입니다 . 를 실행 kill -9하면 응용 프로그램 자체 종료를 지시하지 않고 대신 프로그램이 수행하는 작업에 관계없이 OS에게 프로그램 실행을 중지하도록 지시합니다.

SIGKILL 이 전송 된 후 프로그램이 즉시 중지됩니다. 프로그램 대신 커널 호출 (예 : 파일 IO)이 실행중인 경우 호출에 따라 호출이 끝날 때까지 호출이 계속 될 수도 있고 계속되지 않을 수도 있지만 프로그램 자체는 더 이상 실행되지 않습니다. 참고 추적 디버거에서 실행 작업이나 작업 다르게 여기에 작동 할 수 있습니다.

막을 수없는 다른 신호는 SIGSTOP 인데 비슷한 효과가 있지만 프로그램을 정지시킵니다 . 나중에 SIGCONT 를 보내서 다시 시작할 수 있습니다. 이 동작은 OS에 의해 완전히 제어되며 프로그램은 사전 통지를받지 않습니다.

다른 모든 신호는 프로그램으로 전송됩니다. 그것은 그들이 선택하지만 그들을 처리 할 수 ​​있습니다, 또는 신호를 무시하면 기본 동작이 따릅니다.

다음은 프로세스로 전송되는 유용한 신호입니다.

  • SIGHUP - hangup
    사용자에게 연결이 끊 겼음을 프로그램에 알려줍니다 (예 : SSH 세션 또는 터미널 창이 닫혔습니다).
    일반적으로 프로그램을 정상적으로 종료합니다.
  • SIGINT -이 인터럽트
    당신이 명중 할 때 전송은 CTRL+ C
    또는 프로그램을 죽이지 않을 수 있습니다 - 일반적으로 "당신이 무슨 일을하는지 중지"를 의미
  • SIGTERM - 종료
    가 보낸 기본 killkillall.
    일반적으로 프로그램을 종료합니다. 때로는 프로그램이 수행 한 작업을 모두 마친 후.
  • SIGSTOP은 - 중지
    당신이 명중 할 때 보낸 CTRL+이 Z
    프로그램을 일시 중지, 위에서 언급
  • SIGPIPE - 파이프 폐쇄는
    하여 파이프 라인이 폐쇄 한 프로그램을 지시합니다. 일반적으로 프로그램을 종료합니다.
    예를 들어 , 첫 번째 행이 인쇄 된 후 프로세스에 cat /etc/passwd | head -n1SIGPIPE를 보내 전체 파일을 완료하기 전에 종료됩니다.catcat

이러한 모든 신호는 자체 설정에서 "자연스럽게"발생하지만 원하는 결과를 얻기 위해 신호를 사용하여 조건을 위조 할 수 있습니다.

예를 들어, 누군가의 SSH 세션을 종료하려면 프로세스를 간단히 종료 할 수 있지만 그렇게하면 보안상의 이유로 중요 할 수있는 HISTORY 파일이 업데이트되지 않습니다. 그러나 대신 SIGHUP 을 보내면 프로세스가 연결이 끊어진 것으로 가정하고 표준 정리를 수행합니다.


Ctrl + \는 SIGQUIT기본 액션이 코어를 덤프하고 종료하는을 보냅니다 . 프로그램이 매우 잘못하고있는 경우 사용할 수 있으며 즉시 중지해야하며 나중에 디버깅 할 수 있습니다.
Simon Richter

@SimonRichter 아, 맞아. 결정된.
tylerl

6

kill -9 의미 : 프로세스가 커널에 의해 종료됩니다. 이 신호는 무시할 수 없습니다. 9는 잡을 수 없거나 무시할 수없는 KILL 신호를 의미합니다

용도 : SIGKILL singal

Kill 의미 : 신호가없는 kill 명령은 신호 15를 전달하여 정상적인 방법으로 프로세스를 종료합니다.

용도 : 프로그래머가 처리 할 수있는 SIGTERM 신호

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.