miércoles, 4 de diciembre de 2013

Entendiendo el comando kill y sus señales

En GNU/Linux y otros sistemas operativos tipo Unix, muchos usuarios ejecutan programas y procesos que en algún momento se bloquean o cuelgan. Lo normal es terminarlos a la fuerza o "matarlos" si el sistema no lo hace primero. Esto se logra haciendo uso del comando kill y sus señales, por lo que resulta importante comprender este comando a profundidad.

Existen cuatro comandos para terminar los procesos y más de 60 señales para enviarle a los mismos.

kill
Este comando mata un proceso usando una de las señales y el PID de dicho proceso. Para matar un proceso cuyo PID es 1326 con la señal SIGKILL y el comando kill, lo haremos de dos maneras posibles.

kill -9 1326
kill -SIGKILL 1326

Como podemos observar, el comando kill acepta tanto el bombre de la señal como su número. El nombre de la señal siempre debe estar en mayúsculas.

killall
Este comando mata todos los procesos con el nombre dado. Si tenemos varias instancias de Nautilus o LibreOffice en ejecución, se los llevará a todos. Con killall también debemos usar mayúsculas para las señales.

pkill
Este comando hace lo mismo que killall pero si permite nombres incompletos. Si hacemos lo siguiente: pkill -9 compiz, esto matará cualquier proceso cuyo nombre comience con compiz.

xkill
Este comando permite a los usuarios matar una aplicación o proceso haciendo clic sobre el mismo. En un terminal o en la ventana de Alt+F2 ejecutamos el comando xkill y luego el cursor del mouse se convertirá en un arma mortal. En ese nomento eres "Django", a lo próximo que le hagamos clic será asesinado. Al terminar, el cursos del mouse volverá a la normalidad y serás un simple mortal.

Pero la parte más interesante y que veremos en detalle son las señales y sus funciones. Para visualizar una lista de señales disponibles en nuestro sistema lo haremos con kill -l.
[fraterneo@rainbow ~]$ 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 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
Estas señales no solo son útiles para matar procesos que no responden, sino también para evitar que hagan algo o se comporten de cierta forma. Muchas son usadas a nivel de seguridad. Otras pausan, continúan o reinician procesos.

Debido a lo extenso de la lista de señales solo veremos cuatro, que serán la 1, 3, 9 y 15 por ser usadas con frecuencia en administración de sistemas.

SIGHUP - Esta señal desconecta procesos de su proceso padre. Se usa para reiniciar procesos. Útil para procesos con pérdida de memora.

SIGQUIT - Hace que el proceso produzca un volcado de memoria.

SIGKILL - Forza la detención del proceso de forma inmediata. El proceso no puede ignorar esta señal.

SIGTERM - Esta señal le pide al proceso que se detenga, pero éste puede ignorarla. El proceso se termina con gracia, lo que significa que se le da tiempo para guarde su progreso y libere los recursos que está usando. Por lo que no detiene a la fuerza.

Cuando enviamos cualquier señal a un proceso de otro usuario (generalmente root) nos son requeridos los privilegios de lugar para poder llevar a cabo (ya sea con sudo o con su), por lo que hay que ser ciudadoso, ya que un mal uso de este comando puede causar daños al sistema.

Más información:
man kill
man signal


Artículos relacionados



Widget by Hoctro | Jack Book

0 comments:

Publicar un comentario