[Linux] SIGTERM과 SIGKILL의 차이, kill -9와 kill -15의 차이

SIGTERM과 SIGKILL

유닉스/리눅스에서 SIGTERM, SIGKILL 시그널이 있다.

 

둘 모두 어떠한 프로세스를 종료시킨다는 공통점이 있다.

 

그렇다면 어떤 차이점에는 어떠한 점들이 있을까?

 

SIGTERM

SIGTERM은 Singnal + Terminate 가 합쳐졌다고 보면 된다. 즉, 뭔가 중단하는 시그널이라는 뜻이다.

 

$ kill -15 [pid]

$ kill [pid]	
# default가 -15

 

리눅스에서 kill 명령어에 -15 옵션을 주면 SIGTERM 시그널이 프로세스에게 간다.

또한 kill 명령어는 디폴트가 -15 옵션이기 때문에 옵션을 주지 않아도 SIGTERM 시그널이 발생한다.

 

이때 프로세스를 강제로 종료한다기보다는 종료를 권고하고 무사히 프로세스가 종료하는 쪽에 가깝다

예를 들어 프로세스의 자식 프로세스들이 있다면 해당 프로세스들이 모두 끝난 후 종료되어 문제가 발생하지 않는다.

 

또한 SIGTERM 시그널은 시그널 핸들러(signal handler)를 통해 시그널을 핸들링할 수 있다.

심지어 종료할 수 없는 작업이라면 SIGTERM 시그널을 그냥 무시해 버릴 수도 있다.

 

 

SIGKILL

SIGKILL은 Signal + KILL 이 합쳐졌다고 보면 된다. 즉, 뭔가 죽이는 시그널이라는 뜻이다.

 

$ kill -9 [pid]

 

리눅스에서 kill 명령어에 -9 옵션을 주면 SIGKILL 시그널이 프로세스에 간다.

 

이때  SIGKILL 시그널은 프로세스를 강제로 종료하게 된다.

예를 들어 프로세스의 자식 프로세스들이 있다면 해당 프로세스들이 종료되지 않아도 부모 프로세스가 종료되어 버려, 고아(orphan) 프로세스가 생기는 문제가 발생할 수도 있다.

 

또한 SIGKILL 시그널은 시그널 핸들러(signal handler)로 핸들링할 수 없다. 

 

이러한 차이점으로 인해 kill -9 옵션보다는 -15 옵션을 권장하고 있는 것이다.

반응형

댓글

Designed by JB FACTORY