Matar un proceso en Linux: kill, killall y pkill

3 comandos para matar un proceso en Linux

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
Matar un proceso Linux con el comando kill

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:

Linux matar un proceso con killall

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 :

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *