¿Qué son los procesos zombies?

127

Con comandos como top y el gui basado en System Monitor , puedo ver que en este momento tengo varios procesos zombies.

¿Qué son los procesos zombies?

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

    
pregunta Jesper 14.06.2011 - 00:27

3 respuestas

151

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

Cuando un proceso muere, sus procesos secundarios 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 zombis.

Si tienes procesos zombies, significa que esos zombis no han sido esperados por sus padres (mira PPID mostrado por ps -l ). Tiene tres opciones: arreglar el proceso principal (hacer que espere); matar al padre; o vivir con eso Recuerda que vivir con eso no es tan difícil porque los zombies ocupan poco más de una línea adicional en la salida de ps.

Los zombis se pueden identificar en la salida del comando ps de Unix mediante la presencia de una "Z" en la columna STAT. Los zombis que existen por más de un período corto de tiempo típicamente indican un error en el programa principal. Al igual que con otras filtraciones, la presencia de unos pocos 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 puede enviarse al padre manualmente, usando el comando kill. Si el proceso principal todavía se niega a cosechar el zombi, el siguiente paso sería eliminar el proceso principal. Cuando un proceso pierde su padre, init se convierte en su nuevo padre. Init ejecuta periódicamente la llamada al sistema de espera para recoger cualquier zombi con init como principal.

También hay procesos huérfanos que son un proceso de computadora cuyo proceso principal ha finalizado o terminado.

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 pueden dejar a un servidor en problemas (esta es la mayor diferencia de recursos entre zombis y huérfanos (excepto si ve una película huérfana zombie). Sin embargo, hay varias soluciones para el problema del proceso huérfano:

  1. La exterminación es la técnica más comúnmente utilizada; en este caso, el proceso huérfano se mata.

  2. La reencarnación es una técnica en la cual las máquinas periódicamente intentan 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 principal. 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 reaparecer y ocurre automáticamente. Aunque técnicamente el proceso tiene el proceso "init" como su elemento primario, todavía se llama proceso huérfano ya que el proceso que lo creó originalmente ya no existe.

Más información:

enlace

enlace

enlace

Cómo identificarse y matar el proceso de colgar, cuando el sistema se cuelga y reacciona lentamente ante la entrada del usuario?

Asesinato un proceso en ejecución en una máquina Ubuntu remotamente desde una máquina de Windows que está en LAN

    
respondido por el Luis Alvarado 14.06.2011 - 00:39
20

Los procesos Zombie (también se muestran como <defunct> ), no son procesos reales en absoluto. Son solo entradas en la tabla de proceso del kernel. 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 (puedes usar cat /proc/sys/kernel/threads-max para ver cuántas entradas están permitidas en tu sistema).

Aparecen solo cuando el proceso principal (es decir, el proceso que fork()'ed ellos) está activo, pero todavía no llama a la función de sistema wait() . Una vez que el padre muere, los zombies son wait()'ed for init y desaparecen.

    
respondido por el vartec 14.06.2011 - 11:36
6

Cuando un child process termina, su muerte se comunica a su padre para que el padre pueda tomar alguna acción apropiada.

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

Tienen completed their execution pero todavía tienen entry en process table .

    
respondido por el Prateek Joshi 14.10.2015 - 18:11

Lea otras preguntas en las etiquetas