¿Qué es un Proceso Zombie en Linux?
Si eres un usuario de Linux, es posible que hayas visto procesos zombi desordenados en tu lista de procesos. No puedes matar un proceso de zombies porque ya está muerto, como un zombie real.
Los zombis son básicamente los restos de procesos muertos que no se han limpiado correctamente. Un programa que crea procesos zombie no está programado correctamente: no se supone que los programas permitan que los procesos zombies se mantengan..
Crédito de la imagen: Daniel Hollister en Flickr (remezclado)
¿Qué es un proceso zombie??
Para comprender qué es un proceso zombie y qué hace que aparezcan procesos zombie, deberá comprender un poco cómo funcionan los procesos en Linux..
Cuando un proceso muere en Linux, no se elimina todo de la memoria inmediatamente, su descriptor del proceso permanece en la memoria (el descriptor del proceso solo requiere una pequeña cantidad de memoria). El estado del proceso se convierte en EXIT_ZOMBIE y se notifica al padre del proceso que su proceso hijo ha muerto con la señal SIGCHLD. Se supone que el proceso principal debe ejecutar la llamada al sistema wait () para leer el estado de salida del proceso muerto y otra información. Esto permite que el proceso padre obtenga información del proceso muerto. Después de llamar a wait (), el proceso zombie se elimina completamente de la memoria.
Esto normalmente sucede muy rápidamente, por lo que no verá que se acumulen procesos zombie en su sistema. Sin embargo, si un proceso padre no está programado correctamente y nunca llama a wait (), sus hijos zombis se quedarán en la memoria hasta que se limpien.
Utilidades como GNOME System Monitor, el parte superior comando, y el PD comando mostrar procesos zombie.
Peligros de los procesos zombie
Los procesos zombis no usan ningún recurso del sistema. (En realidad, cada uno usa una cantidad muy pequeña de memoria del sistema para almacenar su descriptor de proceso). Sin embargo, cada proceso zombie conserva su ID de proceso (PID). Los sistemas Linux tienen un número finito de ID de proceso: 32767 por defecto en sistemas de 32 bits. Si los zombies se están acumulando a una velocidad muy rápida, por ejemplo, si el software del servidor mal programado está creando procesos zombie bajo carga, el conjunto completo de PID disponibles se asignará a los procesos zombie, lo que evitará que se inicien otros procesos..
Sin embargo, algunos procesos zombie no son un problema, aunque sí indican un error con su proceso principal en su sistema.
Deshacerse de los procesos zombie
No puedes matar procesos zombies, ya que puedes matar procesos normales con la señal SIGKILL: los procesos zombies ya están muertos. Tenga en cuenta que no necesita deshacerse de los procesos de zombies a menos que tenga una gran cantidad en su sistema; algunos zombies son inofensivos. Sin embargo, hay algunas formas en que puedes deshacerte de los procesos zombies..
Una forma es enviando la señal SIGCHLD al proceso principal. Esta señal le dice al proceso principal que ejecute la llamada al sistema wait () y limpie a sus hijos zombies. Envía la señal con el matar comando, reemplazando pid en el comando siguiente con el PID del proceso principal:
kill -s SIGCHLD pid
Sin embargo, si el proceso principal no está programado correctamente y está ignorando las señales SIGCHLD, esto no ayudará. Tendrás que matar o cerrar el proceso padre de los zombies. Cuando finaliza el proceso que creó a los zombies, init hereda los procesos de zombies y se convierte en su nuevo padre. (init es el primer proceso iniciado en Linux en el arranque y se le asigna PID 1.) init ejecuta periódicamente la llamada al sistema wait () para limpiar a sus hijos zombies, por lo que init hará que los zombies trabajen poco. Puedes reiniciar el proceso padre después de cerrarlo..
Si un proceso padre continúa creando zombies, debe ser arreglado para que llame a wait () para obtener sus hijos zombies. Presente un informe de errores si un programa en su sistema sigue creando zombies.