Kill es un comando unix/linux que permite enviar señales a uno o varios procesos del sistema a través de la shell (bash, ksh, etc). Las señales más utilizadas suele ser la de matar un proceso (9 ó SIGKILL), pararlo (TERM) o reiniciarlo (1 ó HUP) pero hay muchas más que pueden ser útiles en ocasiones. El listado completo de señales disponibles puede visualizarse ejecutando kill -l
:
$ 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 16) SIGSTKFLT 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 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+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
Para solicitar la finalización de un proceso, se utiliza la señal TERM, que es la señal por defecto si no se especifica otra. así que para solicitar el fin de ejecución de uno o varios procesos únicamente tenemos que ejecutar kill
seguido de los PID correspondientes:
# kill 3454 3459 3750
Para forzar que uno o varios procesos terminen de forma inmediata (sin solicitar ni preguntar…) usamos la señal SIGKILL (9). Hay que ser cautos al usar esta señal porque fuerza a los procesos a terminar inmediatamente sin permitirles terminar de forma limpia, es decir, puede que no borre los PID, que no deje terminar las peticiones pendientes, etc:
# kill -9 6574
Si quisieramos forzar que todos los procesos con un determinado nombre finalicen inmediatamente usaríamos killall
en lugar de kill
:
# killall -9 httpd
Otro ejemplo sería el de suspender un proceso, para ello le enviamos la señal de STOP (19) seguida del proceso. Si no conocemos el ID de la señal podemos hacerlo también a través del nombre. En esta señal el proceso quedaría suspendido, por lo que todavía figuraría en la lista de procesos y podríamos reanudarlo posteriormente (próximo ejemplo):
# kill -19 5227
ó
# kill -STOP 5227
Ahora que sabemos suspender procesos, es interesante conocer como reactivarlos, para ello usamos la señal CONT (18). En este ejemplo vamos a «revivir» el proceso anterior:
# kill -18 5227
ó
# kill -CONT 5227
Una de las señales más importantes es HUP (1). Esta señal para y reinicia el proceso indicado, también se puede aplicar con el nombre del proceso además del ID.
# kill -HUP 9873
ó
# kill -HUP script.sh
En caso de querer utilizarlo para por ejemplo, reiniciar todos los procesos httpd usaríamos killall
en lugar de kill:
# killall -HUP httpd
Estos son algunos ejemplos de utilización de señales sobre procesos, como siempre os digo, podéis revisar las páginas man para profundizar sobre todas las señales disponibles.