Matar un proceso en Linux: kill, killall y pkill

¿Qué tenemos en la caja?
Imagina por un momento que has pasado un día excelente trabajando en tu máquina Linux, y de repente un proceso empieza a ralentizar todo el sistema. Lo has identificado y quieres detener su ejecución, pero ¿cómo se mata un proceso de línea de comandos en Linux?
Si el proceso se está ejecutando en primer plano, puedes utilizar el atajo de teclado del terminal "Ctrl+C" para detenerlo directamente. Sin embargo, si el proceso no es visible porque se está ejecutando en segundo plano, y lo has localizado tras ejecutar el comando "top", por ejemplo, puedes utilizar comandos dedicados para "matarlo".
De hecho, el término matar un proceso " Se refiere a la detención de un proceso en ejecución. Si conoce el ID del proceso (PID), puede utilizar la función comando matar como sigue:
kill
En la sintaxis del comando anterior, el bloque 'signal' se refiere a la señal de parada que desea enviar para finalizar el proceso y el bloque 'PID' se refiere al ID del proceso.
Hay otros comandos alternativos al comando kill, así que en este artículo voy a ver varias soluciones para matar un proceso, en particular usando el comando killall.
1. Señales en Linux
En primer lugar, analicemos las señales al final de la crisis. Linux. Cuando un proceso es finalizado por el sistema operativo o por el usuario, es decir, el proceso no ha finalizado de forma natural (por sí mismo), recibe una señal de finalización del sistema.
Estas son las señales disponibles:
- SIGHUP – Signal Hangup
Enviado a un proceso cuando se cierra el terminal que lo controla.
Asociado al valor numérico "1".
- SIGINT – Signal Interrupt
La señal enviada a un proceso cuando un usuario termina un proceso (por ejemplo, Ctrl + C)
Asociado al valor numérico "2".
- SIGKILL – Signal Kill
La señal que sale inmediatamente de un proceso, sin permitirle guardar su estado actual.
Asociado al valor numérico "9".
- SIGTERM – Signal Terminate
Señal enviada para solicitar el fin del proceso. Esta señal puede ser ignorada por un proceso, pero es la mejor forma de terminar un proceso porque puede liberar recursos cuando el proceso recibe SIGTERM.
Asociado al valor numérico "15".
- SIGSTOP – Signal Stop
Señal utilizada para detener un proceso, pero que debe reanudarse posteriormente.
Asociado al valor numérico "19" en la mayoría de las máquinas, u otros valores en máquinas específicas (17, 23 y 24).
En la práctica, es probable que utilice las señales 9 y 15. Antes de pasar a la utilización de los comandos, veamos cómo obtener el PID de un proceso.
2. Obtención del PID de un proceso
También es necesario conocer un mínimo de información sobre el proceso que se quiere matar. ¿Cómo se puede matar un proceso si no se ha identificado previamente? Difícil, dirás, sobre todo porque la orden kill requiere que proporciones el identificador del proceso (PID).
Puede obtener el PID a partir del nombre del proceso:
pidof
3. Matar un proceso en la línea de comandos de Linux
Echemos un vistazo primero al comando kill, ya que lo utilizarás más que el comando killall, que sigue siendo interesante a pesar de todo.
A. Usando el comando kill
El comando kill requiere que conozcas el ID del proceso que quieres matar y, si es aplicable, la señal de fin.
Para simplemente matar un proceso, utilice la siguiente sintaxis:
kill
El envío de una señal de fin a un PID es opcional, y si no se suministra ninguna señal, kill envía SIGTERM (15) por defecto.. En otras palabras, puede utilizar esta sintaxis :
matar
Pongamos un ejemplo... He iniciado un proceso en segundo plano con el comando sleep para esperar 120 segundos, y ejecutándolo en segundo plano para obtener el PID (&). Vamos a intentar matar este proceso.
dormir 120 &
[1] 46532
Dado el retorno del comando anterior, sé que mi proceso tiene el ID "46532", así que para matarlo, necesito hacer :
matar 46532

Si quisiera utilizar una señal de fin específica para terminar este proceso, podría utilizar el valor numérico correspondiente a esta señal, o el nombre de la señal directamente. He aquí un ejemplo en la misma línea que el anterior:
dormir 120 &
[1] 46532
Esto da matar el proceso :
kill -SIGKILL 46532
Si se utiliza el valor numérico, debe utilizarse esta sintaxis:
matar -9 46532
No siempre es útil especificar un tipo de señal porque, por defecto, si no se especifica nada, el comando matar utilizará SIGTERM (15).
B. Usando el comando killall
Si no sabe cuál es el PID de un proceso, o si ese proceso tiene varios procesos hijos, y desea matar los procesos hijos y el proceso padre al mismo tiempopuede utilizar el comando killall. Se utiliza en un principio similar al comando kill, el comando principal para matar un proceso Linux :
killall
Al igual que con el comando kill, especificar una señal de finalización es opcional. Si no se especifica ninguna señal de finalización, killall enviará SIGTERM (15) para detener el proceso en cuestión, como hace la orden kill.
Tomemos el mismo ejemplo anterior basado en "sleep", excepto que esta vez quiero matar dos comandos sleep que se están ejecutando.
$ dormir 60 &
[1] 46536
$ sleep 120 &
[2] 46537
Para matar estos dos procesos "sleep" con killall da :
$ killall sleep
[1]- Sueño completado 60
[2]+ Sueño completado 120
A continuación se muestra el mismo ejemplo:

C. Usando el comando pkill
Un comando alternativo a kill es pkill, que también es capaz de matar un proceso Linux. De hecho, es una especie de combinación de los comandos pgrep y kill. El comando killall mata todos los procesos que tienen un nombre correspondiente. Por otro lado, pkill utiliza el principio de coincidencia a través de patrones para emparejar procesos y matarlos.
La ventaja del comando pkill es que permite matar un proceso simplemente por su nombre, en lugar del PID.
Esta es la sintaxis:
pkill patrón
Algunas opciones útiles disponibles en el comando pkill son :
- -u : processus appartenant à un propriétaire particulier
- -x : processus qui correspondent exactement au pattern
- -signal : spécifier un signal de terminaison (par défaut SIGTERM)
Este patrón puede ser simplemente el nombre del proceso, lo que daría el siguiente comando, si tomamos el ejemplo anterior.
pkill dormir
Dado que pkill se basa en el principio de coincidencia, el comando siguiente también mata el proceso "sleep":
pkill slee
El comando pkill es interesante, pero debe utilizarse con precaución.
4. Conclusión
Con este artículo de la caja de tutoriales de informática, has aprendido 3 comandos diferentes para matar un proceso en Linux. Personalmente, utilizo principalmente el comando "kill", o posiblemente "killall".
Recursos :