LINUX

Comando Killall en Linux con ejemplos

uso práctico del comando killall linuxLa línea de comandos de Linux ofrece varios comandos para matar un proceso. Por ejemplo, el comando ‘kill’ puede usarse 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 eliminan. Pero existe un comando ‘killall’, que coincide exactamente con el nombre del argumento por defecto y mata el proceso de emparejamiento.

En este artículo, analizaremos 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 de lo contrario SIGTERM se envía por defecto. Un proceso puede generar procesos secundarios que son independientes del proceso padre, 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, indicando el nombre, debido a que todos los subprocesos y el proceso padre tienen el mismo nombre, todos los procesos serán eliminados.

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

1) Enumere 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 el -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 / PLAZO (15) se envía al proceso, si no, se envía una señal al comando killall. Las señales anteriores son útiles tanto por los usuarios como por los administradores de sistemas. Entonces, killall admite todas estas señales.

2) Mata un proceso en particular

Para matar un proceso, debemos 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 terminó el proceso ‘test_again’. Esto también se puede confirmar mediante el 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 cuando se mata.

3) Elimina 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 matar 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 ‘prueba’ ya se está ejecutando. Para asegurarse de que el comando killall ignore el caso, use el -I opción. Aquí hay un ejemplo :

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

Observe que ahora terminó 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 cometa un error 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 tanto, se recomienda utilizar killall para finalizar procesos de forma interactiva solicitando una confirmación. Para hacerlo, puede utilizar el -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 terminación de los procesos usando el comando killall.

5) Mata al proceso en silencio

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 desee que killall lleve a cabo su trabajo en silencio, puede utilizar el -q opción:

$ killall -q TEST
$

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

6) Un resultado extraño 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 menor 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 intercambie). En este caso, Mátalos a todos matará todo lo que coincida dentro de 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 mata el proceso con éxito.

Ahora, de acuerdo con la página del manual, si ambos nombres hubieran tenido más de 15 caracteres coincidentes, killall habría matado los procesos donde 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 intenté 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 de si hay algo incorrecto de mi parte o si es un error en el comando killall. Le agradecería que presentara sus puntos de vista 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, alienta a ejecutar pkill en lugar de killall, por lo que, de forma 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 psmisc).

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 fácil de usar.

Leer también:

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba
Cerrar