02 noviembre 2007

Procesos zombie en Linux

Qué mejor tema de conversación en este día (de los Difuntos) que tratar los procesos zombies en Linux. Para empezar echemos un vistazo a los principales estados de los procesos en Linux:
  • 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 pueden deber a errores de programación y pueden ser el síntoma de un sistema lento o que provoca problemas. En la Wikipedia se puede leer más acerca de estos procesos.
Ejecutando el comando 'top' podemos ver en tiempo real los procesos que se están ejecutando en el sistema. En la parte superior derecha se puede ver que hay un proceso zombie:


Desde 'top' podemos ver que hay procesos zombie, pero no podemos ver cuál es. Para ello debemos listar los procesos del sistema con 'ps' y buscando los que tienen estado Z (que es el descriptor de este tipo de procesos como vimos anteriormente):

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

Este proceso debe desaparecer de la tabla de procesos, pero no responderá a un 'kill' "corriente". ¿Cómo lo podemos matar? Pues así:

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

Pues ya está, ya podemos jugar a Resident Evil...

2 comentarios:

Rol dijo...

Tengo una preguntilla,
cuando te aparece un l en estado que significa?
He estado mirando por ahi y es una especie de estado de espera, el caso es que el proceso se queda bastante atontado...

Jeremie dijo...

Ese Kill sirve para 2 cosas, para nada y para mierda... el puto muerto sigue dando guerra...

Sin duda, la mejor manera de matar un zombie tanto en windows como en linux es reiniciandola a la mala...