¿Qué es un "proceso zombie" en Linux?

¿Qué es un «proceso zombie» en Linux?

Si es un usuario de Linux, es posible que haya visto procesos zombies en su lista de procesos. No puedes matar un proceso zombi porque ya está muerto, como un zombi real.

Los zombis son básicamente los restos de procesos muertos que no se han limpiado correctamente. Un programa que crea procesos zombies no está programado correctamente; se supone que los programas no permiten que los procesos zombies persistan.

¿Qué es un proceso zombie?

Para comprender qué es un proceso zombie y qué hace que aparezcan los procesos zombie, debe comprender un poco cómo funcionan los procesos en Linux.

Cuando un proceso muere en Linux, no todo se elimina inmediatamente de la memoria; su descriptor de proceso permanece en la memoria (el descriptor de proceso solo ocupa una pequeña cantidad de memoria). El estado del proceso cambia a EXIT_ZOMBIE y se notifica al padre del proceso que su proceso hijo está muerto con la señal SIGCHLD. Se supone que el proceso padre 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 inactivo. Después de llamar a wait (), el proceso zombie se elimina por completo de la memoria.

Esto normalmente sucede muy rápido, por lo que no verá ningún proceso zombi acumulándose en su sistema. Sin embargo, si un proceso padre está programado incorrectamente y nunca llama a wait (), sus hijos zombies permanecerán en la memoria hasta que se limpien.

Utilidades como GNOME System Monitor, el Elevado orden, y el PD comando de visualización del proceso zombie.

Peligros de los procesos zombies

Los procesos Zombie no utilizan ningún recurso del sistema. (De hecho, 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 de forma predeterminada en sistemas de 32 bits. Si los zombis se están acumulando a un ritmo muy rápido, por ejemplo, si el software de servidor mal programado crea procesos zombies bajo carga, todo el grupo de PID disponibles eventualmente se asignará a procesos zombies, evitando que se inicien más.

Sin embargo, algunos procesos zombies están bien, aunque indican un error con su proceso principal en su sistema.

Deshazte de los procesos zombies

No puede matar procesos zombies porque puede matar procesos normales con el SIGKILL señal: los procesos zombies ya están muertos. Tenga en cuenta que no necesita deshacerse de los procesos zombies a menos que tenga muchos de ellos en su sistema; algunos zombis son inofensivos. Sin embargo, hay varias formas de deshacerse de los procesos zombies.

Una forma es enviar la señal SIGCHLD al proceso principal. Esta señal le dice al proceso padre que ejecute la llamada al sistema wait () y limpie sus hijos zombies. Envíe la señal con el matar comando, reemplazando pid en el siguiente comando con el PID del proceso padre:

kill -s SIGCHLD pid

Sin embargo, si el proceso principal no está programado correctamente e ignora las señales SIGCHLD, 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 zombies y se convierte en su nuevo padre. (init es el primer proceso que se inicia en Linux en el arranque y se le asigna el PID 1). init ejecuta periódicamente la llamada al sistema wait () para limpiar sus hijos zombies, por lo que init hará un trabajo zombie rápido. Puede reiniciar el proceso principal después de cerrarlo.

Si un proceso padre continúa creando zombis, debe arreglarse para que llame correctamente a wait () para cosechar sus hijos zombies. Presenta un error si un programa de tu sistema continúa creando zombis.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas