Una guía para los comandos Kill, Pkill y Killall para finalizar un proceso en Linux


El sistema operativo Linux viene con el comando kill para finalizar un proceso. El comando hace posible continuar ejecutando el servidor sin la necesidad de reiniciar después de un cambio/actualización importante. Aquí viene el gran poder de Linux y esta es una de las razones por las que Linux se ejecuta en el 90% de los servidores del planeta.

Matar comando envía una señal, una señal específica para ser más perfecto para un proceso. El comando kill se puede ejecutar de varias formas, directamente o desde un script de shell.

El uso del comando kill de/usr/bin le proporciona una característica adicional para matar un proceso por nombre de proceso usando pkill.

La sintaxis común para el comando kill es:

# kill [signal or option] PID(s)

Para un comando kill, un nombre de señal podría ser:

Signal Name		Signal Value			Behaviour

SIGHUP			      1				Hangup
SIGKILL			      9				Kill Signal
SIGTERM			      15			Terminate

Claramente del comportamiento anterior, SIGTERM es la forma predeterminada y más segura de matar un proceso. SIGHUP es una forma menos segura de matar un proceso como SIGTERM. SIGKILL es la forma más insegura de las tres anteriores para matar un proceso que termina un proceso sin guardar.

Para matar un proceso, necesitamos conocer el ID de proceso de un proceso. Un proceso es una instancia de un programa. Cada vez que se inicia un programa, se genera automáticamente un PID único para ese proceso.

Cada proceso en Linux, tiene un pid. El primer proceso que se inicia cuando se inicia el sistema Linux es el proceso init, por lo que se le asigna un valor de "1" en la mayoría de los casos.

Init es el proceso maestro y no se puede eliminar de esta manera, lo que asegura que el proceso maestro no se elimine accidentalmente. Init decide y permite que lo maten, donde matar es simplemente una solicitud de apagado.

Para conocer todos los procesos y, en consecuencia, su pid asignado, ejecute el siguiente comando ps.

# ps -A
PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 migration/0
    4 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 migration/0
    6 ?        00:00:00 watchdog/0
    7 ?        00:00:01 events/0
    8 ?        00:00:00 cgroup
    9 ?        00:00:00 khelper
   10 ?        00:00:00 netns
   11 ?        00:00:00 async/mgr
   12 ?        00:00:00 pm
   13 ?        00:00:00 sync_supers
   14 ?        00:00:00 bdi-default
   15 ?        00:00:00 kintegrityd/0
   16 ?        00:00:00 kblockd/0
   17 ?        00:00:00 kacpid
   18 ?        00:00:00 kacpi_notify
   19 ?        00:00:00 kacpi_hotplug
   20 ?        00:00:00 ata/0
   21 ?        00:00:00 ata_aux
   22 ?        00:00:00 ksuspend_usbd

¿Qué tal personalizar la salida anterior utilizando la sintaxis como "proceso pidof"?

# pidof mysqld
1684

Otra forma de lograr el objetivo anterior es seguir la siguiente sintaxis.

# ps aux | grep mysqld
root      1582  0.0  0.0   5116  1408 ?        S    09:49   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql     1684  0.1  0.5 136884 21844 ?        Sl   09:49   1:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root     20844  0.0  0.0   4356   740 pts/0    S+   21:39   0:00 grep mysqld

Antes de dar un paso adelante y ejecutar un comando kill, se deben tener en cuenta algunos puntos importantes:

  1. A user can kill all his process.
  2. A user can not kill another user’s process.
  3. A user can not kill processes System is using.
  4. A root user can kill System-level-process and the process of any user.

Otra forma de realizar la misma función es ejecutar el comando "pgrep".

# pgrep mysql
3139

Para eliminar el PID del proceso anterior, use el comando kill como se muestra.

kill -9 3139

El comando anterior matará el proceso que tiene pid u003d 3139, donde PID es un valor numérico del proceso.

Otra forma de realizar la misma función, se puede reescribir como.

# kill -SIGTERM 3139

De manera similar, "kill -9 PID" es similar a "kill -SIGKILL PID" y viceversa.

Debe conocer el nombre del proceso, antes de matar e ingresar un nombre de proceso incorrecto puede arruinarlo.

# pkill mysqld

Mata más de un proceso a la vez.

# kill PID1 PID2 PID3

or

# kill -9 PID1 PID2 PID3

or

# kill -SIGKILL PID1 PID2 PID3

¿Qué pasa si un proceso tiene demasiadas instancias y varios procesos secundarios? Tenemos un comando "killall". Este es el único comando de esta familia, que toma el nombre del proceso como argumento en lugar del número de proceso.

# killall [signal or option] Process Name

Para eliminar todas las instancias de mysql junto con los procesos secundarios, use el comando de la siguiente manera.

# killall mysqld

Siempre puede verificar el estado del proceso si se está ejecutando o no, utilizando cualquiera de los siguientes comandos.

# service mysql status
# pgrep mysql
# ps -aux | grep mysql

Eso es todo por ahora, de mi parte. Pronto estaré aquí de nuevo con otro tema interesante e informativo. Hasta entonces, estad atentos, conectado a Tecmint y saludable. No olvide dar sus valiosos comentarios en la sección de comentarios.