리눅스 kill 명령어 사용법 (kill -9 의미)

리눅스 kill 명령어는 프로세스를 종료할 때 사용됩니다. 이때 터미널은 프로세스에 시그널을 보냅니다. 프로세스가 받는 시그널에 따라 프로세스의 종료 행위에 차이가 있습니다.

리눅스 kill

kill [signal] [process ID(s)]

 

kill을 통해 프로세스에 보낼 시그널 넘버와 종료할 PID를 입력합니다. 예를 들어, 1234라는 PID를 가진 프로세스를 종료할 때 아래와 같이 사용할 수 있습니다.

kill 1234

 

그런데 kill은 -9 옵션과 함께 사용하는 경우가 더 많습니다. 그 이유는 뒤에서 설명드리겠습니다.

kill -9 1234

시그널이란?

kill 뒤에 붙이는 숫자 옵션을 이해하기 위해서는 시그널(signal) 개념을 알아야 합니다. 리눅스에서 시그널이란 프로세스에 전달되는 일종의 명령 신호입니다. 고유한 이름과 숫자가 있으며 특정 신호를 받은 프로세스는 신호에 맞는 기능이 수행됩니다.

 

예를 들어, 리눅스에서 정말 자주 사용되는 CTRL + C 명령 역시 프로세스에 시그널을 보내는 행위입니다. 이때 터미널은 SIGINT라는 2번 시그널을 포그라운드 프로세스로 보내는데, 이 시그널을 받은 프로세스는 종료됩니다. 그래서 포그라운드 프로세스가 오래 동안 끝나지 않고 프롬프트를 작성할 수가 없는 상태일 때 CTRL + C로 종료할 수 있습니다.

시그널 옵션 숫자

시그널 목록은 kill과 l 옵션을 조합해서 확인할 수 있습니다. 물론 모든 시그널의 의미를 알고 있어야하는 건 아닙니다. 자주 사용하는 시그널이 있다면 그게 뭘 의미하는 것인지 정도만 이해하고 있으면 충분합니다.

kill -l

 

시그널 목록

kill -9 옵션이 가장 많이 사용되는 이유

프로세스 종료에 사용되는 시그널은 15, 19, 9 등이 있습니다.

  • SIGTERM(15) : 프로세스를 정상적으로 종료합니다. 종료 전 필요한 정리 작업을 수행합니다.
  • SIGSTOP(19) : 프로세스를 중지합니다.
  • SIGKILL(9) : 프로세스를 강제 종료합니다. 프로세스가 이 신호를 받으면 정리 작업 없이 즉시 종료됩니다.

 

가장 많이 사용되는 옵션은 -9입니다. 사실 시그널 개념을 모르고 쓰는 경우도 흔하기 때문에 그냥 "프로세스 종료 명령은 kill -9"라고 이해하고 쓰는 분들도 많을 겁니다.

 

kill -9가 가장 많이 쓰이는 이유는 상황에 관계없이 즉각 종료가 보장된다는 점 때문인 거 같습니다. SIGTERM(15)이나 SIGSTOP(9) 같은 다른 시그널의 경우 정리 작업을 수행하기 때문에 프로세스가 신호를 무시하거나 차단하거나 무한 루프에 빠질 수도 있습니다.

 

그리고 kill 명령어를 사용하는 것 자체가 프로세스를 강제종료 해야하는 순간일 확률이 높습니다. 예를 들어, 일반적으로 서비스는 startup.sh, stop.sh 같은 실행 스크립트를 만들어서 시작, 종료하는데 이런 스크립트가 먹히지 않을 때 강제 종료를 위해 kill을 사용하기 때문입니다.

반응형

댓글

Designed by JB FACTORY