¿Qué son los procesos zombie?

138

Con comandos como topy basados ​​en la interfaz gráfica de usuario System Monitor, puedo ver que en este momento tengo varios procesos de zombies.

¿Qué son los procesos zombie?

¿Afectan el rendimiento del sistema o la aplicación a la que son zombies? ¿Usan demasiada memoria o alguna memoria?

Jesper
fuente
39
Son procesos que quieren comer tu CPU;)
Luis Alvarado
8
para el almuerzo ... :)
RolandiXor
3
Estos procesos están muertos pero no enterrados.
Prateek Joshi
2
¿Comer mi CPU? Eso es realmente aterrador!
Håvard Geithus

Respuestas:

162

Los zombis son procesos MUERTOS. No pueden ser 'matar' (no puedes matar a los MUERTOS). Todos los procesos eventualmente mueren, y cuando lo hacen se convierten en zombies. ¡Casi no consumen recursos, lo cual es de esperarse porque están muertos! La razón de los zombies es que el padre (proceso) del zombie puede recuperar el estado de salida del zombie y las estadísticas de uso de recursos. El padre le indica al sistema operativo que ya no necesita al zombi al usar una de las llamadas al sistema wait ().

Cuando un proceso muere, todos sus procesos hijos se convierten en hijos del proceso número 1, que es el proceso init. Init está `` siempre '' esperando que los niños mueran, para que no permanezcan como zombies.

Si tiene procesos de zombies, significa que esos zombies no han sido esperados por sus padres (mire el PPID mostrado por ps -l). Tienes tres opciones: arreglar el proceso padre (hazlo esperar); mata al padre; o vivir con eso. Recuerda que vivir con él no es tan difícil porque los zombis ocupan poco más de una línea extra en la salida de ps.

Los zombis se pueden identificar en la salida del comando Unix ps mediante la presencia de una "Z" en la columna STAT. Los zombis que existen durante más de un corto período de tiempo generalmente indican un error en el programa principal. Al igual que con otras fugas, la presencia de algunos zombis no es preocupante en sí misma, pero puede indicar un problema que se agravaría con cargas más pesadas.

Para eliminar zombies de un sistema, la señal SIGCHLD se puede enviar a los padres manualmente, utilizando el comando kill. Si el proceso padre todavía se niega a cosechar el zombi, el siguiente paso sería eliminar el proceso padre. Cuando un proceso pierde su padre, init se convierte en su nuevo padre. Init ejecuta periódicamente la llamada al sistema de espera para cosechar zombies con init como padre.

También hay procesos huérfanos que son un proceso informático cuyo proceso padre ha finalizado o finalizado.

Un proceso puede quedar huérfano durante la invocación remota cuando el proceso del cliente se bloquea después de realizar una solicitud al servidor.

Los huérfanos desperdician recursos del servidor y potencialmente pueden dejar un servidor en problemas (esta es la mayor diferencia de recursos entre zombies y huérfanos (excepto si ves alguna película de zombies huérfanos). Sin embargo, hay varias soluciones al problema del proceso de huérfanos:

  1. El exterminio es la técnica más utilizada; En este caso, el proceso de huérfano se anula.

  2. La reencarnación es una técnica en la que las máquinas intentan periódicamente localizar a los padres de cualquier cálculo remoto; en ese punto los procesos huérfanos son asesinados.

  3. La caducidad es una técnica en la que a cada proceso se le asigna una cierta cantidad de tiempo para terminar antes de ser asesinado. Si es necesario, un proceso puede "pedir" más tiempo para terminar antes de que expire el tiempo asignado.

Un proceso también puede quedar huérfano ejecutándose en la misma máquina que su proceso padre. En un sistema operativo tipo UNIX, cualquier proceso huérfano será adoptado inmediatamente por el proceso especial del sistema "init". Esta operación se llama re-parenting y ocurre automáticamente Aunque técnicamente el proceso tiene el proceso "init" como padre, todavía se llama un proceso huérfano ya que el proceso que lo creó originalmente ya no existe.

Más información:

http://wiki.answers.com/Q/What_is_Zombie_Process_and_Orphan_Process#ixzz1PCN9vojU

http://www.linuxsa.org.au/tips/zombies.html

http://www.brighthub.com/computing/linux/articles/79186.aspx

¿Cómo identificar y eliminar el proceso de suspensión, cuando el sistema se bloquea y reacciona lentamente a la entrada del usuario?

Matar un proceso en ejecución en una máquina Ubuntu de forma remota desde una máquina Windows que está en LAN

Luis Alvarado
fuente
18
Ekhm! ¡PUEDES matar a los muertos! Solo tienes que apuntar a la cabeza. ¿O nos han estado mintiendo todo el tiempo?
Marcin Kaminski el
1
initllama waita todos sus procesos secundarios, ya sean zombis, huérfanos (adoptados) y biológicos (autogenerados)?
Dedos sangrantes
1
acc. a la Guerra Mundial Z usar camuflaje: P
عثمان غني
¡Dale una medalla a @MarcinKaminski!
Andrea
20

Los procesos de zombis (también se muestran como <defunct>), no son procesos reales en absoluto. Son solo entradas en la tabla de proceso del núcleo. Este es el único recurso que consumen. No consumen ninguna CPU o RAM. El único peligro de tener zombies es quedarse sin espacio en la tabla de procesos (puede usar cat /proc/sys/kernel/threads-maxpara ver cuántas entradas están permitidas en su sistema).

Aparecen solo cuando su proceso padre (es decir, el proceso que los fork()'edmantiene) está vivo, pero aún no llamaron a la wait()función del sistema. Una vez que el padre muere, los zombis son wait()'edpara inity desaparecen.

vartec
fuente
44
¿La topcaptura de pantalla de esta pregunta parece contradecirlo? Allí, el zombie parece usar el 100% de 1 CPU, pero no tiene memoria.
Torben Gundtofte-Bruun
7

Cuando child processtermina, su muerte se comunica a su padre para que el padre pueda tomar las medidas apropiadas.

Un proceso processque está esperando que su padre acepte su código de retorno se llama proceso zombie .

Tienen completed their executionpero todavía tiene un entryen el process table.

Prateek Joshi
fuente
1

Los procesos de Zombie son procesos que han dejado de ejecutarse pero su entrada en la tabla de procesos todavía existe porque el proceso padre no lo ha recuperado a través de la llamada al sistema de espera. Técnicamente, cada proceso que termina es un zombi por un período de tiempo muy corto, pero podrían vivir más tiempo.

Los procesos zombies de mayor duración ocurren cuando los procesos primarios no llaman a la llamada al sistema de espera una vez que el proceso secundario ha finalizado. Una situación en la que esto ocurre es cuando el proceso padre está mal escrito y simplemente omite la llamada en espera o cuando el proceso padre muere antes que el hijo y el nuevo proceso padre no llama esperar en él. Cuando el padre de un proceso muere antes que el hijo, el sistema operativo asigna el proceso hijo al proceso "init" o PID 1. es decir, el proceso init "adopta" el proceso hijo y se convierte en su padre. Esto significa que ahora, cuando el proceso secundario sale, el nuevo padre (init) debe llamar a wait para obtener su código de salida o la entrada de la tabla de proceso permanece para siempre y se convierte en zombie

Ijaz Ahmad Khan
fuente