2020-07-02
|~2 min read
|262 words
UNIX systems come with a utility, kill which, as might be expected, terminates processes.
I wrote about it previously in the context of killing a process that’s occupying a port that I wanted to use [add link].
The thing is - sometimes it doesn’t actually terminate the process.
For example:
% lsof -i :8000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 8061 stephen 27u IPv4 0x5bfc2cdc0d1bfc4b 0t0 TCP localhost:irdmi (LISTEN)% kill 8061
% lsof -i :8000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 8061 stephen 27u IPv4 0x5bfc2cdc0d1bfc4b 0t0 TCP localhost:irdmi (LISTEN)Kill didn’t fail. It didn’t exist with a non-zero error code. It just… didn’t terminate the process.
Fortunately, there is an escape hatch, the signal. There are multiple signals that can be sent along with the termination order. The common ones listed in the manual include:
Some of the more commonly used signals: 1 HUP (hang up) 2 INT (interrupt) 3 QUIT (quit) 6 ABRT (abort) 9 KILL (non-catchable, non-ignorable kill) 14 ALRM (alarm clock) 15 TERM (software termination signal)
These can be used in multiple ways. For example - three distinct ways to call with the QUIT command are:
kill -s QUIT 8000
kill -QUIT 8000
kill -3In my case, I figured the non-catchable, non-ignorable kill would be sufficient for my purposes:
% kill -s KILL 8061
% lsof -i :8000Turns out I was right!
Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!