2011-09-02 21 views
8

Entiendo que se crea un zombie cuando un proceso no se limpia bien (sus recursos no se recuperan). Después de llamar a fork() para crear un nuevo proceso, el padre siempre debe llamar a waitpid en ese proceso para limpiarlo.UNIX Zombies and Daemons

También aprendí que un daemon se crea bifurcando a un niño que se creó con un tenedor, y luego dejando que el niño muera. Aparentemente, el proceso init (pid # 1) en UNIX tomaría la custodia del proceso una vez que hiciera esto.

Lo que quiero saber es que, hasta donde yo sé, cuando un padre muere limpia al niño automáticamente, entonces, ¿cómo se crea un zombie en primer lugar?

En segundo lugar, el padre de un proceso demoniaco se apaga, entonces ¿por qué el proceso demoníaco no se considera un zombie?

+2

¿Alguien quiere dar un comentario para el downvote anónimo y cerrar la solicitud? Siento que es una pregunta bastante sólida. –

+2

Podría argumentarse que se trata más de una pregunta fallada por el servidor, pero la administración del proceso es relevante para la programación * nix, por lo que no veo mucho problema con ella. –

+0

Los procesos cuyo padre ha muerto son huérfanos, no zombis. Los zombis son los "muertos vivientes"; los huérfanos pueden ser miembros productivos de la sociedad. –

Respuesta

13

Lo que yo quiero saber es - por lo que yo sé, cuando un padre muere, limpia el niño de forma automática - Entonces, ¿cómo un zombi se crean en el primer lugar?

No, el padre no limpia los hijos automáticamente. Cada vez que finaliza un proceso, todos sus hijos (en ejecución o zombie) son adoptados por el proceso init.

Los zombis son procesos secundarios que ya han finalizado, y existen cuando su padre todavía está vivo pero aún no ha llamado al wait para obtener su estado de salida. Si el padre muere (y no ha llamado al wait), todos los hijos zombies son adoptados por el proceso init y eventualmente llama al wait en todos ellos para cosecharlos, por lo que desaparecen de la tabla de proceso.

La idea detrás de mantener un proceso zombie es mantener las estructuras de datos apropiadas sobre la finalización del proceso en caso de que el padre alguna vez se interese a través de un wait.

En segundo lugar, el padre de un proceso endemoniada muere, ¿por qué no es el proceso endemoniada considerado como un zombi?

Los padres de los procesos endemoniada mueren, pero el proceso endemoniada se separa de la terminal de control y se convierte en un líder de grupo de procesos a través de la llamada setsid sistema.

+0

Recoger liendres: todos los procesos, excepto el proceso 1, son procesos secundarios, y un zombie es simplemente uno de los "muertos vivientes", un proceso que ha muerto pero cuyo padre aún no ha esperado para recopilar el estado del cadáver.Un zombie es un problema porque ocupa un espacio en la tabla de procesos que no puede reutilizarse hasta que el cadáver haya sido limpiado (por el proceso principal original o por el sistema si el padre muere sin esperar). En casos extremos (200,000 zombis), pueden ralentizar seriamente un sistema. Tuve ese problema a principios de este año: tres zombies por minuto de un proceso del sistema. Actualización de O/S! –

+1

Solo una adición más a esta buena respuesta: una razón para mantener a los zombis es que el PID no debe reutilizarse hasta que el padre haya procesado el mensaje de terminación. – Drunix

0

Bueno, cuando se inició un proceso secundario, se crea una entrada a nivel de kernel junto con su id. De proceso principal. Debido a cualquier razón (mano del servidor, proceso principal muerto desde el final de la aplicación, etc.), el proceso principal se eliminó y el proceso secundario se fue. Kernel no puede limpiar dicho proceso. Solo el proceso principal autorizado para hacerlo. Debido a que dicho proceso todavía está en una mesa en el kernel, también está consumiendo recursos pero no hace nada. Entonces, se llama zombie.

+1

En versiones anteriores de Solaris, solo el proceso principal está autorizado para limpiar el proceso hijo, pero desde el proceso de inicio de Solaris 11 se limpia todo el proceso zombie si el padre muere. – sumana