Guía para comprender la gestión de procesos de Linux con 'ps' y 'kill'
Aprende a inspeccionar procesos de Linux con `ps`, leer columnas clave y detener procesos de forma segura con `kill`, `pkill` y `killall`.
Guía para entender la gestión de procesos en Linux con 'ps' y 'kill'
Gestionar procesos en Linux es una habilidad diaria para solucionar problemas. Cuando una aplicación se cuelga, un trabajo de respaldo consume CPU o un demonio necesita un reinicio limpio, ps te ayuda a encontrar el proceso y kill te permite enviarle la señal correcta.
Cada programa en ejecución tiene un ID de proceso, o PID. Una vez que conoces ese PID, puedes inspeccionar la propiedad, los procesos padre, el uso de CPU y memoria, y decidir si pedirle al proceso que se detenga limpiamente o forzarlo como último recurso.
El modelo de procesos de Linux: PIDs y estados
En Linux, cada programa, servicio o tarea en ejecución se trata como un proceso. Cada proceso se identifica de forma única mediante un ID de proceso (PID), un número entero positivo asignado por el kernel al crearse. Este PID es la forma principal en que las herramientas del sistema hacen referencia y manipulan un proceso específico.
Los procesos se mueven a través de estados como ejecutándose, durmiendo, detenido y zombie. Un proceso durmiente generalmente está esperando E/S u otro evento. Un zombie ya ha salido, pero su proceso padre no ha recogido su estado de salida.
Visualización de procesos con el comando ps
El comando ps (estado del proceso) se utiliza para mostrar información sobre los procesos que se están ejecutando actualmente. Debido a que la salida puede ser abrumadora, se utilizan diferentes opciones para seleccionar qué procesos mostrar y qué columnas de información incluir.
Sintaxis y banderas esenciales de ps
Hay dos estilos principales para las banderas de ps: estilo Unix (prefijado con -) y estilo BSD (sin prefijo). La práctica moderna a menudo favorece la combinación de banderas de estilo Unix para vistas completas.
1. Visualización de todos los procesos (estilo BSD)
El comando más común para una visión general del sistema es ps aux.
a: Muestra procesos para todos los usuarios.u: Muestra procesos en un formato orientado al usuario (mostrando usuario, uso de CPU, uso de memoria, etc.).x: Incluye procesos que no tienen una terminal de control (como demonios en segundo plano).
ps aux
2. Visualización de procesos en un formato estándar (estilo UNIX)
El comando ps -ef proporciona un listado completo en un formato estilo POSIX.
-e: Selecciona todos los procesos.-f: Muestra el listado de formato completo, incluyendo PPID y argumentos del comando.
ps -ef
Interpretación de las columnas clave de salida
Independientemente de las banderas utilizadas, ciertas columnas son críticas para la gestión de procesos:
| Columna | Descripción |
|---|---|
| PID | ID del proceso (el identificador único) |
| PPID | ID del proceso padre (el PID del proceso que inició este) |
| USER | El usuario que posee el proceso |
| %CPU | Porcentaje de tiempo de CPU utilizado |
| %MEM | Porcentaje de memoria física utilizada |
| VSZ | Tamaño de memoria virtual (en KiB) |
| RSS | Tamaño del conjunto residente (memoria física utilizada, en KiB) |
| STAT | Estado actual del proceso (ej., R=Ejecutándose, S=Durmiendo, Z=Zombie) |
| COMMAND | El comando que inició el proceso |
Filtrado de procesos con grep
Para encontrar un proceso específico, puedes canalizar ps a grep.
Por ejemplo, esto busca procesos de Apache httpd:
ps aux | grep httpd
Consejo:
ps | grepa menudo muestra el propio procesogrep. La notación de corchetes evita esa coincidencia adicional:ps aux | grep '[h]ttpd'
Gestión de procesos con el comando kill
El comando kill no solo detiene procesos; les envía señales. El comportamiento predeterminado es solicitar una terminación ordenada, pero otras señales pueden indicarle a un proceso que vuelva a leer archivos de configuración, detenga la ejecución temporalmente o fuerce una salida inmediata.
Comprensión de las señales
Las señales son códigos numéricos o mnemotécnicos estandarizados. Puedes listar las señales disponibles usando kill -l.
| Nombre de la señal | Número de señal | Descripción |
|---|---|---|
| SIGTERM | 15 | La señal de terminación predeterminada. Solicita al proceso que se apague de forma ordenada. |
| SIGKILL | 9 | La señal de terminación inmediata y forzosa. El proceso no puede ignorarla. |
| SIGHUP | 1 | Señal de colgar, a menudo utilizada por los demonios para volver a leer los archivos de configuración. |
| SIGSTOP | Generalmente 19 en Linux x86 | Detiene (pausa) un proceso sin terminarlo. |
| SIGCONT | Generalmente 18 en Linux x86 | Reanuda un proceso detenido. |
Envío de señales con kill
La sintaxis básica del comando kill es:
kill -SEÑAL PID
1. Terminación ordenada (la mejor práctica)
Prueba SIGTERM primero. Le da a la aplicación la oportunidad de guardar el estado, cerrar archivos, finalizar solicitudes y liberar bloqueos.
kill 12345 # Por defecto es SIGTERM (15)
# O
kill -15 12345
2. Terminación forzosa (último recurso)
Si un proceso no responde e ignora SIGTERM, usa SIGKILL (señal 9). Esto detiene el proceso sin limpieza a nivel de aplicación. Esto puede dejar escrituras parciales, archivos de bloqueo abandonados o transacciones interrumpidas dependiendo de lo que el proceso estuviera haciendo.
kill -9 12345
Gestión de procesos por nombre: pkill y killall
Mientras que ps y kill se basan en PIDs, a veces es más rápido apuntar a procesos por nombre. Usa estos comandos con extrema precaución, ya que pueden afectar múltiples procesos simultáneamente.
killall
Termina todos los procesos que coinciden exactamente con el nombre del proceso proporcionado.
killall httpd # Envía SIGTERM a todos los procesos llamados 'httpd'
killall -9 cron # Mata forzosamente todos los procesos 'cron'
pkill
Permite la coincidencia de patrones (regex) al seleccionar qué procesos señalizar, ofreciendo más flexibilidad que killall.
# Mata cualquier proceso cuya línea de comando completa contenga 'firefox'
pkill -f firefox
Advertencia sobre
killallypkill: Si accidentalmente apuntas a un proceso crítico del sistema (comoinitosystemd), puedes desestabilizar o bloquear todo tu sistema operativo. Siempre verifica el PID objetivo usandopsantes de usarkillallopkillcon patrones amplios.
Un flujo de trabajo seguro de gestión de procesos
Al solucionar problemas de una aplicación descontrolada, sigue este enfoque sistemático:
- Identificar: Usa
ps aux | grep <nombre_del_proceso>para encontrar el PID del proceso y verificar su estado. - Verificar el estado: Examina la columna
STAT. Si esZ, el proceso ya está muerto; necesitas que el proceso padre lo recoja. Verifica elPPIDantes de matar algo. - Intentar una detención ordenada: Envía
SIGTERM(kill PIDpor defecto). Espera unos segundos. - Verificar la detención: Ejecuta
psde nuevo. - Forzar la detención si es necesario: Si el proceso persiste y entiendes el riesgo, envía
SIGKILLconkill -9 PID.
El hábito práctico es simple: identifica el PID, verifica el propietario y el estado, envía la señal útil más suave, luego verifica el resultado. Eso mantiene la limpieza de procesos predecible y reduce la posibilidad de detener la carga de trabajo incorrecta.