20Aug
Si eres un usuario de Linux, es posible que hayas visto los procesos zombies moviéndose en tu lista de procesos. No puedes matar a un proceso zombie porque ya está muerto, como un zombie real.
Zombies son básicamente los restos de procesos muertos que no se han limpiado correctamente. Un programa que crea procesos zombies no está programado correctamente: no se supone que los programas dejen que los procesos zombies se queden.
Crédito de la imagen: Daniel Hollister en Flickr( Remixed)
¿Qué es un proceso Zombie?
Para comprender qué es un proceso zombie y qué causa los procesos zombies, deberá comprender un poco cómo funcionan los procesos en Linux.
Cuando un proceso muere en Linux, no todo se elimina de la memoria inmediatamente; su descriptor de 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 le notifica al padre del proceso que su proceso hijo ha muerto con la señal SIGCHLD.Se supone que el proceso principal ejecuta la llamada al sistema wait() para leer el estado de salida del proceso inactivo y otra información. Esto permite que el proceso principal obtenga información del proceso inactivo. Después de llamar a wait() , el proceso zombie se elimina por completo de la memoria.
Esto normalmente ocurre muy rápido, por lo que no verás que los procesos zombies se acumulen en tu sistema. Sin embargo, si un proceso principal no está programado correctamente y nunca llama a wait() , sus hijos zombis se quedarán en la memoria hasta que se limpien. Las utilidades de
como el Monitor de sistema GNOME, el comando superior y el comando ps muestran procesos zombie.
Peligros de los procesos Zombie
Los procesos Zombie no agotan 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 de forma predeterminada en los sistemas de 32 bits. Si los zombies se acumulan a un ritmo muy rápido, por ejemplo, si el software del servidor programado incorrectamente está creando procesos zombis bajo carga, todo el conjunto de PID disponibles eventualmente se asignará a procesos zombie, lo que impedirá que se inicien otros procesos.
Sin embargo, algunos procesos zombies no son un problema, aunque indican un error con el proceso principal en su sistema.
Deshacerse de los procesos Zombie
No se pueden matar los procesos zombies ya que se pueden eliminar los procesos normales con la señal SIGKILL: los procesos zombies ya están muertos. Tenga en cuenta que no necesita deshacerse de los procesos zombies a menos que tenga una gran cantidad en su sistema: unos pocos 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 sus hijos zombies. Envíe la señal con el comando kill , reemplazando pid en el siguiente comando 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, este ganóno ayudaTendrás que matar o cerrar el proceso principal de los zombis. Cuando finaliza el proceso que creó los zombies, init hereda los procesos zombies y se convierte en su nuevo padre.(init es el primer proceso que se inicia en Linux al arrancar 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 zombis funcionen poco. Puede reiniciar el proceso principal después de cerrarlo.
Si un proceso principal continúa creando zombies, debe corregirse para que llame adecuadamente a wait() para obtener sus hijos zombies. Archive un informe de error si un programa en su sistema sigue creando zombies.