- ¿cuáles son los beneficios del concepto de proceso zombie?
Un proceso zombie es solo un pid, un estado de salida y cierta información de contabilidad que permanece hasta que un padre utiliza una de las llamadas al sistema wait
para obtener su estado final. Hasta que un padre llame al wait
, la identificación del proceso del niño debe permanecer marcada como utilizada para que no se le pueda asignar ningún otro proceso. Si a otro proceso se le asignase un pid reciclado, sería difícil distinguir la diferencia entre él y los procesos anteriores que tenían ese mismo pid. Una vez que el padre llama al wait
y devuelve un estado de salida final, se puede suponer que nadie volverá a buscar al hijo en ese pid de nuevo, por lo que el pid puede volver a utilizarse. (creo que en Linux si un padre abandona SIGCHLD como SIG_IGN el núcleo no mantendrá zombis de todo, pero que volver a registrar la disposición de SIGCHLD como SIG_IGN no tiene el mismo efecto)
- saben que el núcleo mantiene (PID , estado de terminación, información de uso de recursos) para el proceso zombie lo que es el significado de "información de uso de los recursos"
parte de esta información es lo que se ejecuta un programa como:
time my_program
informará. Estos valores generalmente se informan en la estructura siginfo para SIGCHLD (que no es exactamente una llamada al wait
) pero también están disponibles a partir de una llamada a la forma de llamada de sistema waitid
(en algunos sistemas). Consulte man sigaction
para obtener información sobre esta estructura.
- cómo PPID del zombi() = 1 y todavía zombi, (init cosecha zombis porque esperar() por defecto)
Un zombi cuya ppid = 1 no deben quedarse en un zombi por mucho tiempo debido a init debería cosechar bastante rápido. Un proceso seguirá siendo un zombi desde un punto poco después de su muerte (ya sea a través del exit
o mediante una señal sin manos que lo mata) hasta que su padre llame al wait
y obtenga su estado final. Esto significa que incluso si init no hace más que llamar a init una y otra vez, podría haber una pequeña cantidad de tiempo en que un proceso puede aparecer como un zombie.Si los procesos aparecen como hijos de init (0 = ppid) durante largos períodos de tiempo (segundos), entonces es probable que algo esté mal.
- ¿alguien puede escribir un código C para hacer que un zombie sea su padre es Init?
Esto no es clara, pero creo que quiere:
pid_t f = fork();
if (f > 0) {
exit(0); // this is the parent dying, so the child will be an orphan
// and get adopted by init
} else if (f == 0) {
sleep(100); // This is the child doing something that takes enough time for
// its parent to commit suicide (exit(0)) and then for you to
// observe that it has now been adopted by init
exit(0); // And now it dyes as well, so init should reap its status, but
// it may be a zombie for a short amount of time first.
} else /* error condition would be handled here */
- zombis pueden negarse a liberar un poco de bloqueo en la memoria ??
Zombies no pueden aferrarse a mucho de nada. Pierden todas sus páginas de memoria, abren manejadores de archivos, ... etc. Prácticamente todo lo que el sistema operativo puede descifrar cómo liberarse debe ser liberado. Sería un error no hacerlo, pero recuerde que el sistema operativo debe saber que se supone que debe liberarse. Es muy fácil crear recursos en el espacio de usuario que deberían liberarse cuando muere un programa que el sistema operativo no sabe que deberían liberarse.
Pertenece a superuser.com –
@Paul R No lo creo, esto viene bajo la programación del sistema. – Searock