Procesos Zombie en Linux (Ubuntu)

En sistemas operativos Unix un proceso zombie es un proceso que ha completado su ejecución pero aún tiene una entrada en la tabla de procesos. Esto se debe a que dicho proceso (proceso hijo) no recibió una señal por parte del proceso de nivel superior (proceso padre) que lo creó informándole que su vida útil ha terminado. Se pueden deber a errores de programación, a situaciones no contempladas por el programador y generalmente provocan lentitud y/o inestabilidad en el Sistema.

Los principales estados en los que pueden encontrarse los procesos en Unix son los siguientes:

running (R) : Procesos que están en ejecución.

sleeping (S) : Procesos que están esperando su turno para ejecutarse.

stopped (D) : Procesos que esperan 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.

 

Comprobando los procesos en el sistema

Tecleando el comando  top  desde una terminal se nos mostrarán todos estos procesos.

top : este comando monitoriza dinámicamente los procesos del sistema mostrando su estado, uso de CPU, cantidad de memoria, tiempo desde su inicio, nombre, etc.

top

 ♦ Listando los procesos zombie

El comando anterior nos muestra los procesos, indicándonos el nº de ellos que se encuentran en cada estado, lo cual nos sirve para saber si existe algún proceso zombie pero no nos dice cual/es son. La manera de identificarlos es listando los procesos del sistema con el comando ps (process status) buscando los que tienen estado Z (descriptor de este tipo de procesos), para ello nos vamos a una terminal y tecleamos

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

Breve explicación de la instrucción:

ps -A   solicitamos un listado de todos los procesos mostrando el  ostat (estado),   ppid (nº proceso padre),  pid (nº proceso),  cmd (comando que lanzó el proceso)  y mediante un pipe (| tubería) hacemos un filtrado grep -e  de los procesos  Zz (zombi)

(si no existe ningún proceso zombie no mostrará nada)


¿Cómo eliminamos los procesos zombie?

Para eliminar los procesos zombie de la tabla de procesos podemos reiniciar el equipo, o bien “matar (kill)” el proceso.

Este tipo de procesos NO responde a las ordenes kill habituales como:

kill  PID_del_proceso

killall CMD_del_proceso

pkill  Nombre_del_proceso

kill -15  PID_del_proceso (solicitar al proceso que termine, a igual que  kill -TERM  PID_del_proceso)

podríamos tratar de obligarlo a terminar por la fuerza con  kill -9  PID_del_proceso  (al igual que  kill -KILL  PID_del Proceso), pero como su proceso padre no está activo no nos va a funcionar. Debemos entonces matar el P[arent]PID al que está asociado.

Para eliminar el proceso zombie nos vamos a una terminal y ejecutamos la siguiente instrucción

kill -HUP PPID_del_proceso

o bien ejecutamos la siguiente instrucción (la cual “mata” todos los procesos Zombie que hubiera)

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

Breve explicación de la instrucción:

ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’     Solicita un listado con filtro sobre los procesos [Zz]ombie.

awk ‘{print $2}’     Filtra por la columna 2 del listado anterior. Corresponde al ParentPID (PPID).

kill -HUP         HUP (Hang UP) Obliga al proceso a reiniciarse examinando sus archivos de configuración.

 

Más información sobre el comando kill en  http://www.comptechdoc.org/os/linux/usersguide/linux_ugprocesses.html

Publicado el 17 enero, 2012 en Linux, Ubuntu y etiquetado en , , , . Guarda el enlace permanente. 1 comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s