Linux, como familia de sistemas operativos tipo Unix basados en un núcleo común, se caracteriza por su robustez y estabilidad. Sin embargo, incluso en estos sistemas, es posible encontrar situaciones en las que las aplicaciones se bloquean, responden de forma inestable o dejan de funcionar. Por ejemplo, pueden reaccionar tan lentamente que no es posible cerrarlas por los medios convencionales. Además, las aplicaciones que no responden no pueden reiniciarse porque su proceso original no finaliza por completo.
La primera solución a la que se suele recurrir es reiniciar el sistema. No obstante, en estos casos también es posible “matar” un programa en ejecución mediante el comando kill en Linux o su variante, el comando killall. A continuación, se detalla cómo utilizarlos correctamente. Conocer estos comandos básicos de Linux es fundamental para cualquier administrador de sistemas.

Un proceso es cualquier programa en ejecución. También puede definirse como una instancia activa de un programa. Si inicias dos ventanas de la misma aplicación, se considerarán dos procesos distintos, no uno solo.
¿Qué es el PID de un Proceso en Linux?
En Linux, cada proceso tiene un identificador único llamado Process ID o, de forma abreviada, PID. A cada proceso se le asigna automáticamente un PID en el momento de su creación.
Procesos Padre, Hijo y Zombie: ¿Cómo se Relacionan?
Se denomina proceso padre al que es responsable de crear un proceso hijo. Si el proceso padre finaliza antes que el hijo, este último se asocia al proceso init, que es el primero en crearse durante el arranque del sistema (aunque existe la opción de reasignar el proceso hijo a otro padre).
Si, por el contrario, un proceso hijo termina antes, permanece en estado “zombie” hasta que el proceso padre recibe información sobre su finalización o notifica al kernel que no requiere dicha información. Una vez hecho esto, los recursos utilizados por el proceso hijo son liberados.
Cómo Afecta el Valor del PID al Comando kill
Dependiendo del valor del PID que se pase al comando linux kill, la señal se enviará a un grupo diferente de procesos. A continuación se describe cómo el valor del PID afecta al envío de la señal:
- PID > 0: La señal se envía al proceso cuyo identificador coincide con el valor especificado.
- PID = 0: La señal se envía a todos los procesos que pertenecen al grupo de procesos actual.
- PID = -1: La señal se envía a todos los procesos del usuario que ejecuta el comando (si es
root, la señal se envía a todos los procesos excepto ainity al propio procesokill). Para ello, se utiliza el identificador de usuario (UID). - PID < -1: La señal se envía a los procesos incluidos en el grupo con un GID (identificador de grupo) que corresponde al valor absoluto del PID.
Cómo Encontrar el PID de un Proceso para Finalizarlo
Para terminar un proceso específico, es necesario conocer su número de PID. Para ello, se utilizan comandos auxiliares. Para visualizar los procesos en ejecución, puedes usar la interfaz de top. Este comando muestra primero estadísticas del sistema (carga y número total de tareas) y luego una lista de todos los procesos, ordenada en tiempo real por su uso de CPU. Si quieres comparar sus diferencias, puedes leer mi guía sobre top vs htop. Sin embargo, este método no es el más eficiente para buscar un PID concreto.
ps: un comando que muestra una lista de los procesos activos con información adicional sobre ellos.grep: se ejecuta junto conpsy filtra la lista obtenida deps.
Para listar todos los procesos, escribe en la terminal:
ps auxFrecuentemente, esta lista es muy extensa, lo que dificulta encontrar el PID de un proceso específico. En ese caso, recurre al comando grep. Para buscar un proceso con un nombre concreto, ejecuta:
ps aux | grep bash
Este comando buscará en el resultado de ps y mostrará únicamente las líneas que contengan “bash”.
Si no se encuentra ningún proceso con ese nombre, la salida mostrará el propio proceso grep, ya que el patrón de búsqueda “bash” coincide con el comando que se está ejecutando.
Si el proceso existe, verás una salida similar a esta:
root 6372 0.0 0.4 7932 4708 tty1 S 11:26 0:00 -bash
root 6372 0.0 0.0 6268 640 tty1 S+ 11:27 0:00 grep bashLa primera línea es la relevante. El número que sigue al nombre de usuario es el identificador único del proceso (PID).
Para encontrar un PID también puedes usar el comando pgrep, una utilidad que examina los procesos activos y devuelve el PID de aquellos cuyos atributos coinciden con la consulta:
pgrep firefoxOtro método auxiliar para determinar el PID es pidof, un comando que recibe como entrada el nombre del proceso:
pidof gcalctoolSi el programa ejecutable utiliza más de un proceso, el comando devolverá todos sus identificadores.
Cómo Usar el Comando kill en Linux con Ejemplos
Ahora que conoces el PID, puedes forzar la detención del proceso. Utiliza el comando kill linux pasándole el número correspondiente:
kill 6372kill envía una señal. Si no se especifica qué señal enviar, por defecto se utiliza SIGTERM (señal 15). Esta señal comunica la necesidad de terminar el proceso, dándole la oportunidad de cerrarse correctamente y liberar sus recursos. La dificultad reside en que esta señal puede ser ignorada por el proceso. Para ver una lista de todas las opciones del comando kill en linux y sus números, introduce:
kill -lSin embargo, SIGTERM no garantiza la detención del proceso si la señal es bloqueada o interceptada. Para asegurar la interrupción del proceso sin riesgo de que sea ignorada, se debe enviar la señal SIGKILL (señal 9), que termina el proceso de forma inmediata. Aquí tienes uno de los comando kill Linux ejemplos más comunes:
kill -SIGKILL 6372
Tras ejecutar este comando, cualquier progreso no guardado se perderá. Es importante señalar que kill puede ser un comando interno (un builtin) o un ejecutable externo. Por ejemplo, en shells comunes como Bash, kill es una función incorporada (builtin) para mejorar el rendimiento, pero también existe el ejecutable externo en /bin/kill. La sintaxis básica es la misma en ambos casos. Para encontrar todas las instancias de kill en tu sistema, ejecuta:
type -a killNota: Con kill puedes terminar varios procesos a la vez. Para ello, especifica sus PID separados por un espacio:
kill -SIGKILL 267 315 442O, si no quieres introducir cada PID manualmente, puedes hacer lo siguiente:
kill -SIGKILL $(pidof gcalctool)pkill: Una Alternativa para Terminar Procesos por Nombre
pkill es una utilidad de línea de comandos, parte del paquete procps-ng, diseñada para enviar señales a procesos basándose en criterios de búsqueda como el nombre, el usuario propietario u otros atributos. A diferencia de kill, que opera estrictamente con PIDs, pkill permite utilizar patrones de búsqueda, lo que simplifica la gestión de procesos.
pkill pingDe forma análoga, puedes especificar el tipo de señal:
pkill -TERM pingEs importante destacar que esta utilidad, por defecto, finaliza todos los procesos que coinciden con el nombre. Por lo tanto, si tienes varias instancias de la misma aplicación, pkill las cerrará todas.
El comando pkill también tiene otra opción: si utilizas el flag -u, puedes especificar un nombre de usuario (o su ID):
pkill -u userDe este modo, se detendrán todos los procesos iniciados por dicho usuario.
Uso del Comando killall: La Forma Directa de Matar por Nombre
La principal diferencia entre kill vs killall es cómo seleccionan el objetivo. El comando kill finaliza un proceso específico a través de su PID (Process ID), requiriendo que primero lo identifiques. Por otro lado, el comando killall termina todos los procesos que coinciden con un nombre exacto, como ‘firefox’, sin necesidad de conocer sus PIDs, simplificando la tarea cuando hay múltiples instancias.
El comando killall linux termina todos los procesos que comparten el mismo nombre exacto. Si tienes varias ventanas de la misma aplicación en ejecución (que, como ya sabes, son procesos diferentes), killall los finalizará todos. Su principal diferencia con pkill es que busca por el nombre exacto del proceso, no por patrones. No requiere conocer el PID, ya que el comando busca todas las coincidencias en el directorio /proc.
killall gcalctoolSin argumentos, killall también envía la señal SIGTERM. Para enviar una señal diferente, es recomendable usar el nombre de la señal para mayor claridad:
killall -s SIGHUP gcalctoolNo siempre es fácil recordar las reglas de uso de todos los comandos. Para obtener ayuda sobre su aplicación, puedes usar el comando man, que muestra información sobre cualquier comando:
man killallCómo verificar que un proceso ha sido finalizado
Para asegurarte de que un proceso fue realmente terminado, utiliza uno de los siguientes métodos:
ps aux | grep <nombre_proceso>
pidof <nombre_proceso>
pgrep <nombre_proceso>Si el proceso ha finalizado con éxito, estos comandos no devolverán ninguna salida.
Consideraciones Clave al Finalizar Procesos
Permisos del usuario root
Un usuario estándar solo puede finalizar sus propios procesos. Esto se debe a que puede no tener los permisos necesarios para enviar señales a procesos de otros usuarios. Sin embargo, el usuario root puede enviar señales a cualquier proceso.
Para interrumpir cualquier proceso (independientemente de si fue iniciado por root o por otro usuario), los comandos kill y killall deben ejecutarse como superusuario. Por ejemplo, en Ubuntu, esto se hace añadiendo sudo. Para entender mejor su funcionamiento, puedes consultar mi guía sobre el comando sudo.
sudo kill 6372Además, solo root tiene permisos para finalizar procesos a nivel de sistema.
Uso de la consola virtual
Supón que necesitas detener un proceso bloqueado, pero no puedes abrir una terminal. En ese caso, accede a una consola virtual presionando Ctrl + Alt + F1, inicia sesión (introduciendo tu login y contraseña) y ejecuta el comando desde allí. Para volver al entorno gráfico, utiliza Ctrl + Alt + F7.
Envío de señales en Linux
Ahora analizaremos con más detalle qué son las señales y cómo funcionan. En Linux, la interacción con los procesos se realiza a través de interrupciones de software, conocidas como señales. Estas son enviadas por el sistema o por el propio usuario al ejecutar comandos. Cuando un proceso recibe una señal de finalización, es deseable que realice ciertas acciones preparatorias.
Para terminar completamente un proceso, también es necesario finalizar sus procesos hijos, eliminar archivos temporales y realizar otras acciones complementarias. Sin embargo, un proceso puede no reaccionar a todas las señales. Una señal que detiene un proceso ha cumplido su función principal. A continuación, se describen otras señales importantes que forman parte de las opciones del comando kill en Linux:
- SIGINT (2): La señal más segura para cancelar un proceso. El proceso finaliza correctamente y devuelve el control. También se puede enviar con la combinación de teclas
Ctrl + C. - SIGQUIT (3): Esta señal también informa al programa que debe terminar. El programa puede realizar un cierre correcto o ignorar la señal. A diferencia de SIGINT, esta señal genera un volcado de memoria (core dump) del proceso. Se puede enviar desde el teclado con
Ctrl + /. - SIGHUP (1): Reinicia un proceso. Se utiliza para recargar archivos de configuración y para abrir o cerrar archivos de registro. A menudo es enviada por el sistema cuando se pierde una conexión, informando al proceso de la falta de comunicación con su terminal de control.
Para que un proceso termine correctamente, los puertos y sockets deben ser liberados y cerrados, y los archivos temporales eliminados. Por ello, no se recomienda recurrir inmediatamente a medidas drásticas como enviar SIGKILL. Intenta finalizar el proceso en el siguiente orden recomendado:
- SIGINT (
Ctrl + C). - SIGTERM (detiene el proceso de forma controlada).
- SIGKILL (último recurso para la finalización).
Para especificar el tipo de señal, puedes usar las siguientes formas, aunque se recomienda usar el nombre para mayor claridad:
- Por nombre completo (recomendado):
-SIGHUPo-s SIGHUP. - Por nombre abreviado:
-HUPo-s HUP. - Por número:
-1o-s 1.
Más Allá de Matar Procesos: Otros Usos y Comandos
Recarga de procesos con kill
Como ya se ha mencionado, el comando kill con la señal SIGHUP indica que se debe actualizar la configuración. Para entender mejor cómo funciona, tomemos Nginx como ejemplo. Para reiniciar el servidor, es necesario enviar una señal al proceso principal. El PID de este proceso se encuentra en el archivo nginx.pid, normalmente ubicado en el directorio /var/run.
Utiliza el comando cat para leer el contenido del archivo y mostrarlo en la salida estándar:
cat /var/run/nginx.pidCon esto, obtendrás el PID deseado. Ahora, para actualizar la configuración, como en el caso de configurar Nginx, escribe:
sudo kill -SIGHUP 740Este comando debe ejecutarse como root o con privilegios de sudo.
Gestión de prioridades de procesos
En un entorno de servidor, a veces es necesario cambiar la prioridad de un proceso, ya que ciertas tareas pueden ser críticas mientras que otras pueden ejecutarse con los recursos sobrantes.
Para controlar las prioridades, Linux utiliza el concepto de “amabilidad” (niceness). Las tareas de mayor prioridad se consideran menos “amables” porque no comparten recursos. En cambio, los procesos de baja prioridad son más “amables” porque requieren un mínimo de recursos.
En la salida del comando top, la columna NI muestra el valor de amabilidad. Este puede variar de -20 (prioridad más alta) a +19 (prioridad más baja).
Si por alguna razón quieres iniciar un programa con un valor de amabilidad específico, utiliza el comando nice:
nice -n 10 <comando>Para cambiar el valor de amabilidad de un programa ya en ejecución, utiliza la herramienta renice, a la que le pasas la nueva prioridad y el PID del proceso:
renice 11 -p <PID>Donde 11 es el nuevo valor de amabilidad y <PID> es el identificador del proceso que quieres modificar.
Conclusiones: Uso Responsable de kill y killall
Los comandos kill, pkill y killall son herramientas potentes en Linux que permiten finalizar la ejecución de procesos activos. Representan una parte integral de la administración de sistemas Linux y se aplican en diversos escenarios, como la detención de procesos, la recarga de servicios y muchos otros.
A pesar de su eficacia, es fundamental ser cauteloso al utilizarlos, ya que un uso incorrecto puede provocar la pérdida de datos y consecuencias inesperadas. Se recomienda consultar el manual de estos comandos, como las páginas man de kill y killall, para garantizar su uso correcto y seguro.







¿Qué te parece?
Es bueno conocer tu opinión. Deja un comentario.