GNU/Linux >> Tutoriales Linux >  >> Linux

Comando Killall en Linux con ejemplos

La línea de comandos de Linux ofrece varios comandos para eliminar un proceso. Por ejemplo, el comando 'matar' se puede usar para matar un proceso pasando su PID como argumento, el comando 'pkill' toma un patrón como entrada y todos los procesos en ejecución coincidentes se matan. Pero existe un comando 'killall', que coincide exactamente con el nombre del argumento de forma predeterminada y elimina el proceso de coincidencia.

En este artículo, discutiremos este comando con algunos ejemplos prácticos. El comando killall se puede usar para enviar una señal a un proceso en particular usando su nombre. Significa que si tiene cinco versiones del mismo programa ejecutándose, el comando killall eliminará las cinco.

La señal se puede especificar como un argumento para este comando o bien SIGTERM se envía por defecto. Un proceso puede generar procesos secundarios que son independientes del proceso principal, lo que significa que cada subproceso se identifica por su pid. Con el comando kill, usamos el pid para seleccionar el subproceso a matar, pero con el comando killall, al indicar el nombre, ya que todos los subprocesos y el proceso principal tienen el mismo nombre, todos los procesos se eliminarán.

Discutamos el uso del comando killall a través de algunos ejemplos prácticos.

1) Lista de todas las señales admitidas

El comando Kill admite algunas señales que se pueden enumerar con -l opción. killall envía señales a los procesos. Puedes usar -s opción (seguida del nombre de la señal) para enviar una señal particular a un proceso.

$ killall -l
 HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
 STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
 UNUSED

Por defecto SIGTERM/TERM (15) se envía a procesar, si no se da señal al comando killall. Las señales anteriores son útiles tanto para los usuarios como para los administradores de sistemas. Killall es compatible con todas estas señales.

2) Matar un proceso en particular

Para matar un proceso, necesitamos identificarlo para verificar si se está ejecutando. Podemos matar un proceso en particular por su nombre. Supongamos que hay dos procesos que tienen los mismos caracteres iniciales:

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test
 himanshu 3970 2811 0 14:14 pts/0 00:00:00 ./test_again

Ahora, así es como puede usar el comando killall para matar 'test_again':

$ killall test_again
 [2]+ Terminated ./test_again

Como puede ver, el comando killall finalizó el proceso 'test_again'. Esto también se puede confirmar a través del comando ps:

$ ps -aef | grep "test"
 himanshu 3969 2811 0 14:14 pts/0 00:00:00 ./test

Observe que 'test_again' no se muestra en la salida ya que se eliminó.

3) Matar un proceso ignorando el caso

El comando killall distingue entre mayúsculas y minúsculas de forma predeterminada. Aquí hay un ejemplo:

$ ps -aef | grep "test"
 himanshu 4177 3161 0 14:54 pts/3 00:00:00 ./test
 himanshu 4178 3161 0 14:54 pts/3 00:00:00 ./test_again
 himanshu 4180 3161 0 14:54 pts/3 00:00:00 grep --color=auto test

puedes ver que todos nuestros procesos están en minúsculas. intentemos eliminar el proceso "./test" pero ingresamos el nombre en mayúscula

$ killall TEST
 TEST: no process found

Entonces puede ver que el comando killall no pudo encontrar ningún proceso llamado TEST, mientras que un proceso llamado 'test' ya se está ejecutando. Para asegurarse de que el comando killall ignore el caso, use -I opción. Aquí hay un ejemplo:

$ killall -I TEST
 [1]- Terminated ./test

Observe que ahora finalizó con éxito el proceso de 'prueba'.

4) Matar procesos con confirmación

El comando killall se puede usar para matar más que un proceso.

$ killall test test_again
 [2]- Terminated ./test_again
 [3]+ Terminated ./test

Pero, puede ocurrir que se equivoque al insertar el nombre del proceso indicando otro nombre. Puede ser un problema grave si el proceso indicado es un proceso crítico para el sistema. Por lo tanto, se recomienda usar killall para finalizar procesos de forma interactiva solicitando una confirmación. Para hacerlo, puedes usar -i opción.

$ killall -i test test_again
 Kill test(4201) ? (y/N) y
 Kill test_again(4202) ? (y/N) y
 [1]- Terminated ./test
 [2]+ Terminated ./test_again

Entonces puede ver que de esta manera el usuario puede controlar la finalización de los procesos usando el comando killall.

5) Terminar el proceso silenciosamente

A veces, cuando killall no puede encontrar un proceso específico, se queja de lo mismo en la salida.

Aquí hay un ejemplo:

$ killall TEST
 TEST: no process found

Pero, en caso de que quieras que killall realice su trabajo en silencio, puedes usar el -q opción:

$ killall -q TEST
$

Entonces puede ver que cuando se usó -q, se suprimió la salida.

6) Un extraño resultado del comando killall

La página de manual del comando killall dice que, de forma predeterminada, coincide con los nombres completos solo si tienen una longitud inferior o igual a 15 caracteres. Por lo tanto, si el nombre de un comando tiene más de 15 caracteres, es posible que el nombre completo no esté disponible (es decir, se intercambia). En este caso, killall matará todo lo que coincida con los primeros 15 caracteres.

Por ejemplo, suponga que hay dos procesos siguientes con nombres largos:

$ ps -aef | grep "test"
 himanshu 4021 3161 0 14:27 pts/3 00:00:00 ./test_abcdefghij
 himanshu 4035 3161 0 14:27 pts/3 00:00:00 ./test_abcdefgh

El primer proceso en la salida anterior tiene exactamente 15 caracteres en el nombre. Intentemos matarlo usando el comando killall:

$ killall test_abcdefghij
 [1]- Terminated ./test_abcdefghij

Entonces puede ver que el comando killall termina el proceso con éxito.

Ahora, según la página del manual, si ambos nombres hubieran tenido más de 15 caracteres coincidentes, killall habría eliminado los procesos en los que el nombre va seguido de -e. opción o matará todo lo que coincida dentro de los primeros 15 caracteres. Aquí hay un ejemplo:

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4141 3161 0 14:46 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwxyz
 himanshu 4143 3161 0 14:46 pts/3 00:00:00 grep --color=auto test

Observe que ambos procesos ahora tienen más de 15 caracteres coincidentes en su nombre. Ahora, cuando traté de matar el segundo proceso usando killall:

$ killall test_abcdefghijklmnopqrstuvwxyz
 [6]+ Terminated ./test_abcdefghijklmnopqrstuvwxyz

Mató solo el proceso especificado y no también el segundo proceso

$ ps -aef | grep "test"
 himanshu 4114 3161 0 14:40 pts/3 00:00:00 ./test_abcdefghijklmnopqrstuvwx
 himanshu 4146 3161 0 14:47 pts/3 00:00:00 grep --color=auto test

No estoy seguro si hay algo incorrecto de mi parte, o es un error en el comando killall. Le agradecería que expresara su opinión sobre esto en los comentarios.

Por cierto, aquí están los detalles del comando killall en mi sistema:

$ killall --version
killall (PSmisc) 22.20
Copyright (C) 1993-2012 Werner Almesberger and Craig Small

PSmisc comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it under
the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.

Conclusión

Desde Centos 7, se recomienda ejecutar pkill en lugar de killall, por lo que, de manera predeterminada, es posible que obtenga el error "killall:comando no encontrado" cuando ejecute el comando. Si aún lo desea, instale pkill agregando el paquete psmisc (# yum install pmisc).

Killall es útil porque podemos matar un proceso por su nombre incluso si no podemos recordar su pid. No tiene algunas opciones porque es relativamente simple de usar.

Leer también:

  • Cómo eliminar un proceso desde la terminal de Linux
  • fkill - Herramienta interactiva para eliminar procesos en Linux

Linux
  1. Comando wc Linux con ejemplos

  2. Comando Linux Tee con ejemplos

  3. Comando de cabeza de Linux con ejemplos

  4. Comando JQ en Linux con ejemplos

  5. Ejemplos de comandos killall en Linux

15 comandos ps de Linux con ejemplos

Comando de CD de Linux con ejemplos

Comando de vigilancia de Linux con ejemplos

Comando de espera en Linux con ejemplos

Comando de espera en Linux explicado con ejemplos

Comando IP de Linux con ejemplos