Uno de los comandos básicos de linux para administrar un sistema linux o para administrar un servidor linux es el comando que permite detener procesos o como se dice comúnmente, matar uno o varios procesos. Este comando en linux es el comando kill. La principal función para utilizar este comando es cuando un servicio o cuando un proceso se sale de control o cuando entra en un ciclo infinito causando que el servidor o el sistema se ponga lento o que deja de responder al ocupar demasiados recursos del sistema como la memoria o el espacio en disco. En estos casos en necesario terminar o matar dicho proceso.
Comandos Linux: kill
Para utilizar el comando linuxkill en linux y matar algún proceso solo debes indicar en identificador de proceso, este puede ser llamado PID o Process ID, para conocer el PID de un programa o proceso puedes utilizar el comando ps para obtener una lista de los procesos que están en ejecución. Aquí te pongo un ejemplo:
$ ps PID TTY TIME CMD 2541 pts/0 00:00:00 bash 2590 pts/0 00:00:00 ps
En este ejemplo el PID es mostrado como un número al inicio de cada linea. Como vemos el proceso “bash” tiene el PID 2541. Si quisieras detener este proceso lo que tienes que hacer es ejecutar el comando kill y el número de PID 2541 de la siguiente forma:
$ kill 2541
Esto es la explicación sencilla pero hay mas detalles que podemos ver sobre el comando kill ya que este comando lo que hace es enviar una señal a uno o más procesos y las señales que pueden ser enviadas son 64 y puedes ver la lista completa al final del artículo, pero las más comunes son:
0) SUGNULL Null (Checar acceso al PID) 1) SIGHUP Hangup (Terminar) 2) SIGINT Interrupt (Terminar) 3) SIGQUIT Quit (Terminar con salida del core) 9) SIGKILL Kill (Forzar que el proceso termine) 15) SIGTERM Terminate (Terminar normalmente el proceso) 18) SIGCONT Continue (Corre un proceso detenido) 19) SIGSTOP Stop (Detiene un proceso) 20) SIGTSTP Terminal (Pausa el proceso)
Cuando se invoca el comando kill por omisión se envía la señal 15) SIGTERM, esta señal busca que el proceso termine de forma normal, como el ejemplo anterior. Sin embargo hay ocasiones que un proceso puede no responder a esta señal. Si se desea matar ese proceso se puede enviar la señal 9) SIGKILL agregando un -9 como parámetro al comando kill, así:
$ kill -9 2541
Otro ejemplo práctico del uso del comando kill es cuando requieres terminar o matar varios procesos a la vez, para conocer los PIDs de algún programa podemos usar el comando ps y enviar la salida por un pipe (tubería) hacia el comando grep para que nos muestre solo las líneas de texto que incluyan la palabra «apache» para luego seleccionar solo los PIDs que nos interesa detener. Así se vería la salida de estos comandos:
$ ps aux | grep apache root 1489 0.0 0.3 233536 10092 ? Ss 22:11 0:00 /usr/sbin/apache2 -k start www-data 1740 0.0 0.1 233560 6052 ? S 22:11 0:00 /usr/sbin/apache2 -k start www-data 1741 0.0 0.1 233560 6052 ? S 22:11 0:00 /usr/sbin/apache2 -k start www-data 1742 0.0 0.1 233560 6052 ? S 22:11 0:00 /usr/sbin/apache2 -k start www-data 1743 0.0 0.1 233560 6052 ? S 22:11 0:00 /usr/sbin/apache2 -k start www-data 1744 0.0 0.1 233560 6052 ? S 22:11 0:00 /usr/sbin/apache2 -k start
$ sudo kill 1740 1741 1742 1743 1744 [sudo] password for user:
$ ps aux | grep apache root 1489 0.0 0.3 233536 10104 ? Ss 22:11 0:00 /usr/sbin/apache2 -k start
Lista de las señales que pueden ser enviada a un proceso por el comando kill:
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
Puedes ver mas detalles sobre las señales que puede enviar el comando kill y su significado en la siguiente URL (en inglés) http://man7.org/linux/man-pages/man7/signal.7.html
Tu Servidor y Amigo
Sígueme en Twitter: @larmedina
Sígueme en Facebook: dame un like LuisMedinaMLM
By Arturo Guevara 09/25/2013 - 9:09 am
Muy bien explicado y muy bien documentado, muchas gracias por el aporte
By Luis Armando Medina 10/04/2013 - 10:46 am
Gracias por tu comentario Arturo Guevara, siempre es motivador recibir comentarios como el tuyo. Saludos.
By Miguel 07/13/2014 - 8:21 pm
Con que facilidad se entiende este comando explicado de esta manera. Gracias.
By practica 8 | afcorreo 01/27/2015 - 1:26 am
[…] Lista los trabajos activos bg Pone un trabajo en segundo plano fg Pone un trabajo en primer plano kill Envía una señal a un proceso killall Mata procesos por nombre shutdown Apaga o reinicia el […]