¿Debo matar el proceso zombie en mi sistema?

20

Como soy un novato en sistemas Linux / Unix y acabo de leer sobre procesos zombie , tengo una pregunta. Tengo 10 de ellos en este momento. ¿Necesito matarlos y si es así, por qué? ¿Son una carga en mi sistema?

592 processes: 581 sleeping, 1 running, 10 zombie, 0 stopped
Jason Paddle
fuente
25
No hay necesidad de matarlos. Ya estan muertos.
Marco
2
Entonces ya no cargan mi sistema. Y permanecerán así hasta que reinicie el sistema o los mate, ¿verdad?
Jason Paddle
77
@Marco: No puedes matar lo que ya está muerto. ¡Pero puedes matar a sus padres, harrharr!
wullxz
77
El problema es que sus padres no los cosecharon (cuando murieron).
ypercubeᵀᴹ
3
10 zombies ??? Estás infestado! Corre Jason corre.
Luc M

Respuestas:

29

No puedes matar a un zombie, ya está muerto.

Los recursos de ese proceso son gratuitos y están disponibles para otros procesos. Lo que queda es una entrada en la tabla de procesos. Esto no influye en el rendimiento, no se preocupe.

Marco
fuente
Sí, esto tiene sentido. Puedo matar el proceso de los padres. Gracias por la información. Solo quería saber si cargan o no tienen sistema.
Jason Paddle
Sin embargo, creo que hay un límite de zombis. Creo que es 1024, por lo que no afectará el rendimiento, pero creo que hay un límite en el número que puede tener.
ProfessionalAmateur
@ProfessionalAmateur ¿Qué sucede si alcanzas el límite zombie (1024 o lo que sea)?
Roddy of the Frozen Peas
@ RoddyoftheFrozenPeas - Para ser honesto, no estoy seguro, siempre los he limpiado antes de llegar a ese punto. Me imagino que el sistema intentará crear otro zombie y tal vez tenga una violación de memoria o algún otro error duro, desbordamiento o falla de segmentación de algún tipo.
ProfessionalAmateur
2
@ ProfessionalAmateur: No hay límite de zombies en Linux. Los PID de zombis están sujetos /proc/sys/kernel/pid_max, al igual que cualquier otro PID.
rsaw
16

¿Cuáles son estos procesos zombis que aparecen en ps? ¡Los mato pero no se van!

Los zombis son procesos muertos. 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 siempre está 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 que muestra 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.

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

Y en caso de que estés en una ola de asesinatos, este hilo de superusuario puede ser interesante para ti: ¿cómo encuentras el proceso principal de un proceso zombie?

wullxz
fuente
Tenga en cuenta que arreglar a los padres puede ser excesivo, tal vez simplemente no haya llegado al punto de esperar a sus hijos todavía. Tal vez lo haga más tarde (o sí, tal vez no).
Romain
sí tienes razón. La respuesta de la pregunta que vinculé le dice cómo determinar el proceso principal. Así que siempre tienes la oportunidad de verificar qué procesos crean los zombis y decidir si es necesario mantenerlo en funcionamiento.
wullxz
7

No necesitas matarlos.

Para construir una comprensión básica:

Cada proceso es hijo de un proceso padre (excepto el proceso init, pero no debemos preocuparnos por eso).

Cuando un proceso secundario termina de ejecutarse, aún puede contener datos a los que el proceso principal desea acceder, generalmente un código de salida que describe el resultado del proceso secundario (¿Tuvo éxito? ¿Error? ¿Cuál fue el código de error?).

Un proceso hijo terminado se queda en la tabla de procesos como un proceso zombie hasta que el proceso padre "cosecha" o espera en el proceso hijo, que es simplemente el proceso padre que le dice al sistema operativo que ya no necesita ese proceso hijo; Ha leído los valores de retorno que desea, y ha terminado con él. En este punto, el sistema limpiará la entrada en la tabla de proceso.

Darth Android
fuente
3

Este proceso no necesita ser eliminado.

En caso de que quiera matarlo de todos modos (por cualquier razón), asegúrese de dispararle a la cabeza, aquí hay un comando útil:

kill -HUP `ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}'`

Desde https://www.erianna.com/kill-a-linux-zombie-process

Datageek
fuente
1
+1 para shoot at the head.
BenjiWiebe