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 | grep a menudo muestra el propio proceso grep. 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 killall y pkill: Si accidentalmente apuntas a un proceso crítico del sistema (como init o systemd), puedes desestabilizar o bloquear todo tu sistema operativo. Siempre verifica el PID objetivo usando ps antes de usar killall o pkill con 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:

  1. Identificar: Usa ps aux | grep <nombre_del_proceso> para encontrar el PID del proceso y verificar su estado.
  2. Verificar el estado: Examina la columna STAT. Si es Z, el proceso ya está muerto; necesitas que el proceso padre lo recoja. Verifica el PPID antes de matar algo.
  3. Intentar una detención ordenada: Envía SIGTERM (kill PID por defecto). Espera unos segundos.
  4. Verificar la detención: Ejecuta ps de nuevo.
  5. Forzar la detención si es necesario: Si el proceso persiste y entiendes el riesgo, envía SIGKILL con kill -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.