Comando killall: terminar procesos por nombre, la señal -9 e instalar psmisc
El comando killall es un comando de Linux que elige los procesos en ejecución por el nombre del programa en lugar del número de proceso (PID) y les envía una señal; si no indicas ninguna señal, envía SIGTERM (según el manual oficial). Como termina de una vez todos los procesos con el mismo nombre, primero comprobamos con pgrep y ps cuatro procesos lanzados en un servidor AlmaLinux 9 a partir de copias de sleep con otros nombres, y en los ejecutables de más de 15 caracteres solo quedaban los primeros 15 en el nombre del proceso.
Ejecutamos killall solo sobre procesos xxsleep lanzados para pruebas con una cuenta normal en un servidor Debian 12. Las cajas de resultados muestran la salida de rpm, pgrep, ps, pidof, cat y kill ejecutados con la cuenta root en un servidor AlmaLinux 9.8, y la salida de killall ejecutado en el servidor Debian 12. Los números de proceso (PID), los nombres de proceso, las rutas de los ejecutables y los nombres de cuenta se cambiaron por valores de ejemplo.
1️⃣ Instalar el comando killall
killall forma parte del paquete psmisc. En un servidor AlmaLinux 9.8, al comprobar con rpm a qué paquete pertenece /usr/bin/killall, apareció la versión psmisc 23.4.
rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killallpsmisc 23.4La lista de archivos del mismo paquete, vista con rpm -ql, también incluía pstree y fuser.
Si aparece [command not found], que indica que no se encuentra el comando, instala el paquete psmisc. En la familia RHEL es [dnf install psmisc], y en la familia Debian, [apt install psmisc]. El servidor Debian 12 ya tenía instalado psmisc 23.6, y killall estaba en /usr/bin/killall.
Al comprobarlo en el servidor AlmaLinux 9.8, pkill, de nombre parecido, estaba en el paquete procps-ng, y kill era un comando integrado de la shell.
2️⃣ Cómo usar el comando killall
La forma básica es [killall nombre del proceso]. Busca todos los procesos en ejecución con el nombre indicado y les envía una señal; si escribes varios nombres, hace lo mismo con cada uno (según el manual oficial).
Como los procesos con el mismo nombre terminan todos a la vez, primero comprueba con pgrep qué se está ejecutando con ese nombre. Copiamos sleep en una carpeta de trabajo con los nombres xxsleep-a1, xxsleep-a2 y xxsleep-longname-x1, lanzamos xxsleep-a1 dos veces para tener cuatro procesos en total y mostramos números y nombres con -l.
pgrep -l xxsleep2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnamEn la cuarta línea, el ejecutable se llama xxsleep-longname-x1, pero el nombre del proceso estaba cortado en xxsleep-longnam.
Con -a aparece la línea de comandos completa que se ejecutó. Los dos xxsleep-a1 con el mismo nombre se distinguieron por el argumento final en segundos, 300 y 310.
pgrep -a xxsleep2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330Para buscar solo los procesos cuyo nombre coincide exactamente, añade -x. El resultado con xxsleep-a1 fueron dos números.
pgrep -x xxsleep-a12141
2142Para consultar solo los números escribiendo un nombre tal cual, usa pidof. Al buscar xxsleep-a1 aparecieron los dos números en una línea.
pidof xxsleep-a12142 2141ps muestra solo los procesos cuyo nombre coincide exactamente si escribes varios nombres separados por comas después de -C.
ps -o pid,comm -C xxsleep-a1,xxsleep-a2 PID COMMAND
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2En el servidor Debian 12 lanzamos cuatro procesos con los mismos nombres y ejecutamos [killall xxsleep-a1]: no mostró nada y terminó con el código de salida 0. Al buscar de nuevo con pgrep, los dos xxsleep-a1 habían desaparecido y solo quedaban xxsleep-a2 y xxsleep-longname-x1. Si en lugar de un nombre escribes una ruta con una barra (/), elige los procesos que ejecutan ese archivo, sea cual sea su nombre (según el manual oficial).
Al escribir el nombre inexistente xxsleep-zz apareció una línea con [no process found] detrás del nombre, y terminó con el código de salida 1. El código de salida solo es 0 cuando se termina al menos un proceso por cada nombre indicado (según el manual oficial).
killall xxsleep-zzxxsleep-zz: no process foundPara terminar solo un proceso cuyo número conoces, envía una señal solo a ese número con kill: Comando kill de Linux.
3️⃣ Opciones del comando killall
Al leer en /proc/PID/comm el nombre del proceso lanzado como xxsleep-longname-x1, solo quedaban los primeros 15 caracteres: xxsleep-longnam.
cat /proc/2155/commxxsleep-longnamEjecutamos pgrep con xxsleep-longname, de 16 caracteres.
pgrep -a xxsleep-longnameTerminó sin salida y con el código de salida 1, y al buscar de nuevo con xxsleep-longnam, de 15 caracteres, apareció ese proceso.
pgrep -l xxsleep-longnam2155 xxsleep-longnamCuando killall recibe un nombre de más de 15 caracteres y hay procesos cuyo nombre completo no puede leer, toma como objetivo todos los que coinciden en los primeros 15 caracteres; con -e se salta esas entradas (según el manual oficial). En el servidor Debian 12, al escribir xxsleep-longnam, los primeros 15 caracteres, con -e y -v, aparecieron líneas que indicaban que se saltaba otros tres procesos con el nombre cortado en 15 caracteres, y terminó con [no process found].
killall -e -v xxsleep-longnamkillall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process foundAl escribir el nombre completo xxsleep-longname-x1, tras las mismas líneas de salto apareció una línea que indicaba que se había enviado la señal a ese proceso.
killall -e -v xxsleep-longname-x1killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15Con -v apareció, por cada proceso al que se envió una señal, una línea con el nombre, el número y el número de la señal.
killall -v xxsleep-a2Killed xxsleep-a2(2150) with signal 15-i pregunta por cada proceso si debe terminarlo. Lanzamos otra vez dos xxsleep-a1 y pasamos y y n por la entrada estándar, en ese orden: las dos preguntas aparecieron seguidas en una línea, y solo terminó el primer xxsleep-a1; el segundo siguió en marcha.
printf 'y\nn\n' | killall -i xxsleep-a1Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)-u elige solo los procesos que pertenecen a esa cuenta, y si omites el nombre, el objetivo son todos los procesos de esa cuenta. Al escribir xxsleep-a1 después del nombre de la cuenta, solo se envió la señal al xxsleep-a1 que quedaba.
killall -v -u user xxsleep-a1Killed xxsleep-a1(2172) with signal 15-o y -y eligen por la hora de inicio, y el tiempo se escribe con un número seguido de una unidad s, m, h, d, w, M o y, como en [-o 30m].
-r lee los nombres como expresiones regulares extendidas. Al pasar el patrón ^xxsleep-a a pgrep aparecieron tres procesos que empiezan por xxsleep-a.
pgrep -l '^xxsleep-a'2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2-w espera, comprobando cada segundo, hasta que desaparecen todos los procesos a los que se envió la señal. Si un proceso ignora la señal o queda como zombi, puede esperar indefinidamente.
La primera tabla de abajo recoge los comandos de comprobación y las opciones de killall que se ejecutaron en este artículo; las opciones de killall que no se ejecutaron están en la segunda tabla, según el manual oficial.
📌 Comprobar procesos y killall: resultados de este artículo
| Comando | Tarea | Resultado en este artículo | |
|---|---|---|---|
| pgrep -l nombre | Número y nombre de los procesos cuyo nombre lo contiene | Con xxsleep salen cuatro líneas, y el nombre largo solo se ve hasta los primeros 15 caracteres, xxsleep-longnam | |
| pgrep -a nombre | Número y línea de comandos completa | Los dos xxsleep-a1 con el mismo nombre se distinguen por los argumentos finales 300 y 310 | |
| pgrep -x nombre | Solo los números de los procesos cuyo nombre coincide exactamente | Con xxsleep-a1, dos líneas: 2141 y 2142 | |
| pidof nombre | Los números que se ejecutan con ese nombre, en una línea | Con xxsleep-a1, 2142 2141 | |
| ps -o pid,comm -C nombre | Número y nombre de los procesos cuyo nombre coincide exactamente; varios nombres separados por comas | Dos líneas de xxsleep-a1 y una de xxsleep-a2 | |
| cat /proc/PID/comm | Nombre del proceso (hasta los primeros 15 caracteres) | 2155 es xxsleep-longnam | |
| killall nombre | SIGTERM a los procesos con ese nombre | Terminaron los dos xxsleep-a1 con código de salida 0; el nombre inexistente xxsleep-zz dio no process found y código de salida 1 | |
| killall -e nombre | Nombres de más de 15 caracteres solo si coincide el nombre completo | xxsleep-longnam dio no process found; xxsleep-longname-x1 terminó | |
| killall -v nombre | Muestra el resultado de cada proceso al que se envía la señal | Killed xxsleep-a2(2150) with signal 15 | |
| killall -i nombre | Pide confirmación por cada proceso antes de terminarlo | Al introducir y y n, solo terminó el primer xxsleep-a1 | |
| killall -u nombre de cuenta | Solo los procesos que pertenecen a esa cuenta | Escrito junto con un nombre, solo terminó el xxsleep-a1 de esa cuenta | |
| killall -9 nombre | SIGKILL en lugar de SIGTERM | Killed xxsleep-a2(2173) with signal 9 |
📎 Otras opciones: según el manual oficial
| Opción | Tarea | |
|---|---|---|
| -I, --ignore-case | Compara los nombres sin distinguir mayúsculas y minúsculas | |
| -g, --process-group | Señal al grupo de procesos en lugar de al proceso (una vez por grupo) | |
| -l, --list | Lista de nombres de señales conocidas | |
| -n, --ns PID | Solo procesos del mismo espacio de nombres PID que ese PID; por defecto, todos los espacios de nombres | |
| -o, --older-than tiempo | Solo procesos iniciados antes de ese tiempo (unidades s, m, h, d, w, M, y) | |
| -q, --quiet | No avisa aunque no haya terminado ningún proceso | |
| -r, --regexp | Lee los nombres como expresiones regulares extendidas | |
| -s, --signal señal | Señal que se envía en lugar de SIGTERM | |
| -V, --version | Muestra la información de la versión | |
| -w, --wait | Espera hasta que desaparecen todos los procesos a los que se envió la señal | |
| -y, --younger-than tiempo | Solo procesos iniciados después de ese tiempo | |
| -Z, --context patrón | Solo procesos cuyo contexto de seguridad coincide con el patrón de expresión regular extendida; se escribe antes que los demás argumentos; el nombre se puede omitir |
🔲 Simulador del comando killall
El simulador de abajo empieza con una lista de los cuatro procesos xxsleep más el xxsleep-a2 de la cuenta de ejemplo user1. Pulsa los chips para comparar qué líneas desaparecen de la lista con [killall -v], [-i] y [-u]; los mensajes de salida de killall imitan la salida obtenida al ejecutarlo en el servidor Debian 12.
4️⃣ Señales de killall
La señal que se envía se escribe por nombre, como [-HUP] o [-SIGHUP], por número, como [-1], o detrás de la opción -s (según el manual oficial). [killall -9 nombre del proceso] envía la señal 9, SIGKILL. SIGKILL es una señal que el proceso no puede capturar ni ignorar (según el manual oficial), así que el proceso termina sin poder hacer tareas de cierre. Por eso se envía cuando la señal por defecto, SIGTERM, no lo termina.
En el servidor Debian 12, al añadir -9 junto con -v sobre el xxsleep-a2 lanzado de nuevo, apareció una línea con el número de señal 9.
killall -9 -v xxsleep-a2Killed xxsleep-a2(2173) with signal 9Comprobamos los nombres y números de las señales con [kill -l]. killall también tiene una opción -l que muestra los nombres de señales que conoce.
kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAXAl introducir un solo número apareció solo el nombre de esa señal. El 15 que killall envía por defecto era TERM, y el 9 que se envía con -9 era KILL.
kill -l 15TERMkill -l 9KILLSi escribes un nombre de señal que no está en la lista, aparece un mensaje con la forma [FOO: unknown signal; killall -l lists signals.] (según el manual oficial y los mensajes del programa).
🔢 FAQ & contenido recomendado
Comprobación en tiempo real
Comando top de Linux (ver el uso de CPU y memoria)
Comando que muestra en tiempo real cuánta CPU y memoria usa cada proceso.
Control de trabajos
Segundo plano (Back Ground) y primer plano (Fore Ground) en Linux: controlar procesos
Método de control de trabajos para enviar un comando a segundo plano y volver a traerlo al primer plano.
Archivos abiertos
[Linux] Comando lsof: mostrar información de los archivos en uso
Comando que muestra los archivos y sockets que tiene abiertos un proceso, junto con su PID.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.