zombies zombie sleeping procesos proceso crear zombie-process

zombie-process - sleeping - procesos zombies windows



¿Qué son Zombies y qué los causa? ¿Hay procesos Zombie y objetos Zombie? (2)

Puedo encontrar preguntas sobre zombis pero ninguna que aborde directamente lo que son, por qué y cómo ocurren. Hay una pareja que aborda los procesos zombis en el contexto de responder una pregunta específica, pero no abordan la causa.

También hay preguntas con respecto a los procesos de zombies y preguntas sobre objetos zombies relacionados con Objective-C / Cocoa. ¿Cuáles son las diferencias o cómo se relacionan? ¿Es un "EXEC_BAD_ACCESS" en Mac / iPhone (o error similar en otras plataformas) sinónimo de un zombie?

¿Cómo se pueden prevenir los zombis y existen algunas mejores prácticas que los ayuden a evitarlos?

Sería útil tener esta información en un solo lugar. Esta pregunta está destinada a ser independiente de la plataforma / idioma, si es posible.


Cuando finaliza un proceso, gran parte de su estado todavía existe en el kernel, porque su padre aún puede querer ver algunas cosas, como su valor de retorno, que debe almacenarse en algún lugar. Cuando un padre llama a wait () o waitpid (), le dice al kernel que lo descarte porque ya ha terminado. Hasta que lo haga, el niño conserva un pid y consume recursos. Esos procesos secundarios no cosechados se llaman zombies. Incluso matar a un zombi no lo eliminará, sino que debe ser cosechado (esperado) por su padre. Si el padre muere, se pasan a "init" en los sistemas Unix, cuyo único trabajo es esperar a que las cosas los limpien.

Nunca he oído hablar de "objetos zombies", pero supongo que se refiere a cosas que no han sido limpiadas por el recolector de basura, o que tienen referencias circulares o algo así, tales que no van a ser limpiadas arriba por el recolector de basura. La metáfora es bastante similar: fork () == malloc (), wait () == free () en un cierto nivel. (No es una metáfora perfecta, por supuesto)


Los procesos Zombie y los objetos zombies no tienen ninguna relación. Los procesos de Zombie son cuando un padre inicia un proceso hijo y el proceso secundario finaliza, pero el padre no recoge el código de salida del hijo. El objeto de proceso debe permanecer activo hasta que esto suceda, no consume recursos y está muerto, pero aún existe, por lo tanto, ''zombie''.

Los objetos Zombie son una función de depuración de Cocoa / CoreFoundation para ayudarte a detectar errores de memoria: normalmente, cuando el recuento de un objeto cae a cero, se libera inmediatamente, pero eso dificulta la depuración. En cambio, si los objetos zombis están habilitados, la memoria del objeto no se libera instantáneamente, solo se marca como un zombie, y cualquier intento adicional de usarlo se registrará y podrá rastrear en qué parte del código se utilizó el objeto después de su vida útil .

EXEC_BAD_ACCESS es su excepción común "Usó un puntero malo", como si lo hubiera hecho:

(*(0x42)) = 5;