Procesos zombis en Linux: Encontrar, Eliminar, Prevenir
15 min de lectura - 19 de mayo de 2026

Aprenda a identificar, eliminar y prevenir procesos zombis en Linux. Comandos, correcciones de código y consejos de supervisión para administradores de servidores.
Procesos zombis en Linux: cómo encontrarlos y eliminarlos
Un proceso zombi es un proceso hijo que ha terminado de ejecutarse pero que sigue ocupando un espacio en la tabla de procesos del kernel. Existe porque el proceso padre no ha llamado a wait() para recoger su estado de salida. Los zombis no consumen CPU ni memoria, pero cada uno ocupa un PID. Si se acumulan en cantidad suficiente, el sistema no podrá generar nuevos procesos. Esta entrada explica cómo detectarlos, eliminarlos y evitar que aparezcan en primer lugar.
Por qué son importantes los procesos zombis en los servidores
Un solo proceso zombi es inofensivo. El problema surge cuando se acumulan. Linux tiene un espacio de PID finito: 32 768 en sistemas de 32 bits y hasta 4 194 304 en sistemas de 64 bits. Si los procesos zombis llenan la tabla de procesos, el kernel no puede crear nuevos procesos. Eso significa que no hay nuevas conexiones, ni nuevos subprocesos de trabajo, ni nada nuevo.
Los servidores web como Apache y Nginx están especialmente expuestos porque crean procesos hijos para gestionar el tráfico. Las pruebas de rendimiento han demostrado una caída del 48 % en el rendimiento cuando los procesos zombi se acumulan en un servidor web con mucha actividad. En 2019, una fuga de canal de Golang en un pod DNS de Kubernetes creó más de 26 000 procesos zombi en un solo nodo, llenando la tabla de procesos y provocando un fallo en la resolución de DNS en todo el clúster.
La tabla siguiente muestra las diferencias clave entre un proceso normal y un zombi:
| Característica | Proceso normal | Proceso zombi |
|---|---|---|
| Símbolo de estado | R, S, D o T | Z (inactivo) |
| CPU / Memoria | Uso activo | 0 % / 0 (ya finalizado) |
| Entrada en la tabla de procesos | Una ranura | Una ranura |
Respuesta a kill -9 | Se termina inmediatamente | Sin efecto (ya inactivo) |
| Memoria del núcleo | Descriptor de proceso completo | Solo estado de salida mínimo |
La conclusión fundamental: no se puede kill -9 un zombi. Ya está muerto. La única forma de eliminarlo es hacer que el proceso padre lo recoja, o matar al padre para que init (PID 1) lo herede y lo recoja automáticamente.
Cómo encontrar procesos zombis
Los procesos zombis aparecen con una Z en la columna STAT y <defunct> junto al nombre del comando. Enuméralos con:
ps aux | grep -w ZPara ver el ID del proceso padre (PPID), que necesitarás para eliminarlos:
ps -eo pid,ppid,stat,comm | grep -w ZEl top comando también muestra el recuento total de procesos zombis en su línea de encabezado. Para una comprobación rápida no interactiva:
top -bn1 | grep zombieRastrear el proceso padre con pstree
Una vez que tengas el PID de un proceso zombi, rastrea hasta el proceso padre responsable:
pstree -p -s <zombie_pid>Esto muestra el árbol genealógico completo desde init hasta el zombi. Si pstree no está instalado, ps auxf ofrece una vista de árbol ASCII similar.
Recuento de zombis para la supervisión
Un recuento limpio que excluye el propio proceso de grep:
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Para la supervisión continua durante la resolución de problemas:
watch -n 1 'ps aux | grep -w Z | wc -l'Cómo eliminar procesos zombis
Los procesos zombis solo se pueden eliminar recopilando su estado de salida. Eso significa trabajar a través del proceso padre.
1. Encuentra el proceso padre.
ps -o ppid= -p <zombie_pid>2. Indique al proceso padre que elimine a sus procesos hijos.
kill -SIGCHLD <parent_pid>Esto le indica al proceso padre que llame wait() a cualquier hijo que haya finalizado. Es un proceso no disruptivo y funciona con aplicaciones que se comportan correctamente.
3. Si SIGCHLD no funciona, reinicia el servicio.
systemctl restart <service_name>4. Si el proceso padre no responde, elimínalo.
kill <parent_pid>O si ignora SIGTERM:
kill -9 <parent_pid>Cuando el proceso padre muera, init (PID 1) o systemd adopta los zombis huérfanos y los elimina inmediatamente. Ten cuidado en los sistemas de producción. Terminar el proceso padre también termina todos sus procesos hijos activos.
5. Verifica la limpieza.
ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'Si el recuento es 0, ya está todo listo.
Prevención de procesos zombis
Gestiona los procesos hijos en tu código
La causa principal de la mayoría de las acumulaciones de procesos zombis es un proceso padre que nunca llama a wait(). Solucionalo en el origen:
- C: Configura
signal(SIGCHLD, SIG_IGN);para descartar automáticamente la información de salida de los procesos hijos, o utiliza un controlador de señales conwaitpid(-1, NULL, WNOHANG)para recogerlos de forma asíncrona. - Python: Utilice
subprocess.run(), que espera automáticamente. Si se utilizaPopen, llama aproc.wait()explícitamente. - Bash: Añade
waital final de los scripts que inician tareas en segundo plano.
Configure systemd correctamente
Para los servicios gestionados por systemd, estos ajustes evitan la acumulación de procesos zombis:
KillMode=control-groupasegura que todos los procesos hijos se terminen juntos cuando el servicio se detiene.TimeoutStopSecda tiempo al proceso padre para recoger a los hijos antes de que systemd envíe SIGKILL.WatchdogSecreinicia automáticamente los servicios que no responden, detectando los casos en los que el proceso padre se cuelga y deja de eliminarlos.
Supervisa tu tabla de procesos
Configure una tarea cron que se ejecute cada 15 minutos para contar los procesos zombis y alertar si el recuento supera un umbral:
ps aux | awk '$8 ~ /Z/' | wc -lSupervise también el uso de su tabla de procesos comparando el recuento actual con /proc/sys/kernel/pid_max. Si supera el 80 %, investiga antes de que se convierta en un problema. Unos pocos procesos zombis transitorios durante el funcionamiento normal no son motivo de preocupación. Un recuento creciente que no vuelve a bajar a cero apunta a un error de la aplicación que hay que corregir.
Conclusión
Los procesos zombis son procesos muertos que no se han eliminado. No consumen CPU ni memoria, pero ocupan PID, y una tabla de procesos llena impide que el servidor realice ninguna tarea útil.
- Encuéntralos con
ps aux | grep -w Zy rastrea el proceso padre conpstree. - Elimínalos enviando
SIGCHLDal proceso padre, reiniciando el servicio o matando al proceso padre como último recurso. - Prevé su aparición escribiendo código que llame a
wait(), configurando systemd correctamente y supervisando su tabla de procesos.
Si estás ejecutando cargas de trabajo de alto tráfico y necesitas una infraestructura fiable con acceso root completo, los servidores dedicados de FDC te ofrecen un control total sobre la gestión de procesos y la configuración del sistema.

Procesos zombis en Linux: Encontrar, Eliminar, Prevenir
Aprenda a identificar, eliminar y prevenir procesos zombis en Linux. Comandos, correcciones de código y consejos de supervisión para administradores de servidores.
15 min de lectura - 19 de mayo de 2026
Lista de comprobación para el refuerzo de servidores Linux
15 min de lectura - 8 de mayo de 2026