[TIL] kill -9/-15 PID
인텔리제이에서 Run했더니
web server failed to start. port 8080 was already in use ~ 에러가 나왔다.
나는 초보도 아니고 궁서체 보초 수준이라서 살짝 당황했지만 침착하게 구글링을 했다.
하라는대로 터미널에 lsof -i :8080를 치니 여러 프로세스가 8080포트를 사용하고 있었다.
암튼 이 프로세스를 죽이면 된다고 kill -9 PID 를 입력하라고 해서 했더니 아주 깔끔하게 지워졌다.
해결은 했는데...
내가 이런 커맨드에 익숙하지 않아서 이 생태계(?)를 잘 모르는 상태라 그런지는 몰라도
-e 이런식으로 영어가 적힌건 많이봤어도 -9 처럼 숫자가 있는게 너무 신기해서(..) 이 9가 무슨뜻인지 갑자기 너무 궁금해졌다.
우선
kill -<signal> <pid>
이런식으로 사용하고 가운데 9자리에 오는 것은 signal에 해당한다.
signal을 줘도 되고 안줘도 되어서 kill pid로만 쓸 수 있는데, 이는 사실 kill -15 pid와 같다.
15는 SIGTERM의 번호이며, SIGTERM은 프로세스에게 정상적인 종료를 요청하는 신호다. (15대신에 SIGTERM를 사용해도됨)
kill pid == kill -15 pid == kill -SIGTERM pid
다만 프로세스가 응답이 없을경우 이 요청을 무시하게 되는데, 이때 사용할 수 있는것이 9다.
9는 SIGKILL의 번호이며, SIGTERM은 프로세스를 강제종료하는 신호다. (이것도 9대신에 SIGKILL사용해도됨)
kill -9 pid == kill -SIGKILL pid
프로세스가 이 신호를 받으면 즉시 종료된다.
즉시 종료되기 때문에 마무리 작업을 할 수 가 없으니,
프로세스가 자원을 정리하지 않는다거나, 저장하지 않은 데이터가 날아간다거나 하는 부작용이 있을 수 있다고 한다.
되도록 15를 사용하여 kill을 하라는데 나는 kill -9 pid를 한 후에 그 사실을 알게되었다. ㅎ;
별건 아니지만 개인적으로 흥미롭게 알게된 사실이라 정리해본다.