Guide to Unix/Commands/Process Management/Kill

kill is a unix command used to send unix signals to running processus. By default it will try to send the TERM signal which will ask the process to stop it works hence the name kill.

Available signals are available from the kill command:

$ kill -l 1) SIGHUP      2) SIGINT       3) SIGQUIT      4) SIGILL 5) SIGTRAP     6) SIGABRT      7) SIGBUS       8) SIGFPE 9) SIGKILL    10) SIGUSR1     11) SIGSEGV     12) SIGUSR2 13) SIGPIPE    14) SIGALRM     15) SIGTERM     17) SIGCHLD 18) SIGCONT    19) SIGSTOP     20) SIGTSTP     21) SIGTTIN 22) SIGTTOU    23) SIGURG      24) SIGXCPU     25) SIGXFSZ 26) SIGVTALRM  27) SIGPROF     28) SIGWINCH    29) SIGIO 30) SIGPWR     31) SIGSYS      33) SIGRTMIN    34) SIGRTMIN+1 35) SIGRTMIN+2 36) SIGRTMIN+3  37) SIGRTMIN+4  38) SIGRTMIN+5 39) SIGRTMIN+6 40) SIGRTMIN+7  41) SIGRTMIN+8  42) SIGRTMIN+9 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX $

You can send a given signal to all process having a given name or only to one process giving its PID. For example if you want to send signal SIGHUP to process 23154 : kill -s SIGHUP 23154 If you want to send the same signal to all process named Apache : kill -s SIGHUP Apache

You can also groups pid, the two commands above can be merged in: kill -s SIGHUP 23154 Apache

Issuing signals, you can control your system a bit more. Say you have an ongoing script, running under PID 12345, which use a lot of your cpu and you would like to "pause" it while doing something else. You can issue your process the STOP signal:

kill -s STOP 12345

To later resume it, you will ask the process to CONTinue its work:

kill -s CONT 12345

Example:

We will start a simple process (sleep) in the background (&). The sleep process does nothing but waiting for the given number of seconds (in our case 360 seconds or 6 minutes): $ sleep 360 & [1] 7551 $ The shell give us back the PID of the process (7551). Let it run a bit then check its status with the ps command:

$ ps -o fname,pid,stat,etime COMMAND   PID STAT     ELAPSED bash     7425 Ss         04:47 sleep    7551 S          00:58 ps       7600 R+   49710-06:27:47 $

Now we ask our process to pause its work: $ kill -s STOP 7551

Press enter to update your output buffer and the shell give you the confirmation: $ [1]+ Stopped                 sleep 360 $

Sometime later, our process is still stopped: $ ps -o fname,pid,stat,etime COMMAND   PID STAT     ELAPSED bash     7425 Ss         10:37 sleep    7551 T          06:05 ps       7719 R+   49710-06:27:47 $ You can notice that 6 minutes elapsed since the start although the process should have ended after 5 minutes (remember we used "sleep 360").

Now we want to tell the process to continue its operation: $ kill -s CONT 7551

Update your buffer by pressing enter: $ [1]+ Done                    sleep 360 $

Blam the process is finished. When you issued the CONT signal the process resumed and checked the current time, as more than 360 seconds have been elapsed it ended itself.