Procesos Zombie en Linux

En informática se conoce como un proceso a una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados. En los sistemas Unix/Linux los principales estados de los procesos son :

  • Sleeping (S): Procesos que están esperando su turno para ejecutarse.
  • Running (R): Procesos que están en ejecución.
  • Waiting (D): Procesos esperando a que se finalice alguna operación de Entrada/Salida.
  • Zombie (Z): Procesos que han terminado pero que siguen apareciendo en la tabla de procesos. Se deben a errores de programación y pueden ser el síntoma de un sistema lento o que provoca problemas.

Un proceso Zombie es aquel que nunca recibió una señal por parte del proceso padre que lo creo. Un proceso hijo es aquel que tiene su origen en un proceso de nivel superior que es el encargado de enviar las señales a los procesos hijos generados por él mismo para indicarles que su lapso de vida ha terminado.

Los procesos Zombies en su mayoría se deben a errores de programación y pueden ser el síntoma de un sistema lento o que provoca problemas. Esta situación suele ocurrir también debido a que alguna configuración no fue contemplada por el desarrollador.

Ejecutando el comando top podemos ver en tiempo real los procesos que se están ejecutando en el sistema, y nos indicará si hay alguno en estado Zombie, pero no podemos saber el proceso exacto con dicho estado.

top

zombie

Para ver todos los procesos corremos:

ps aux

Para ver solo los zombies podemos ejecutar cualquiera de los dos comandos siguientes:

ps -el |grep ‘Z’

ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]‘[/bash]

Si al listar los procesos aparece alguno con estado Z, significa que es un Zombie, lo que quiere decir que la aplicación no está bien solventada o tiene bugs, sabiendo su PID  se puede eliminar  ejecutando el comando kill con la señal 9 y el PID. Por ejemplo queremos matar el proceso con el PID 1945:

kill -9 1945

Cuando tenemos muchos procesos Zombie o al menos mas de uno, se puede usar el siguiente comando para matarlos todos al instante:

kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]‘ | awk ‘{print $2}’`

Fuentes: 12