El proceso de Zombie no tendrá ningún efecto en el rendimiento o la lentitud, ya que los procesos de Zombie no usan ningún recurso del sistema.
Nota: - Prácticamente, todavía está usando el PID (que es un recurso limitado), y las estructuras de datos del núcleo para el proceso todavía están asignadas. Por lo general, esto no importará mucho, pero el uso de la memoria del núcleo puede ser significativo en sistemas con memoria muy limitada.
Problema causado por el proceso zombie
Cada proceso zombie conserva su ID de proceso. Los sistemas Linux tienen un número finito de ID de proceso: 32767 de forma predeterminada en los sistemas de 32 bits. Si los zombies se acumulan a una velocidad muy rápida, el conjunto completo de PID disponibles eventualmente se asignará a procesos zombies, evitando que se inicien otros procesos.
Nota : en los sistemas de 64 bits, puede aumentar el PID máximo; consulte /unix//a/16884/170373
Sin embargo, algunos procesos de zombies dando vueltas no son un problema, aunque sí indican un error con su proceso principal en su sistema.
Explicación:
Cuando un proceso muere en Linux, no todo se elimina de la memoria inmediatamente, su descriptor de proceso permanece en la memoria.
El estado del proceso se convierte EXIT_ZOMBIE
y el padre del proceso es notificado de que su proceso hijo ha muerto con la SIGCHLD
señal.
Se supone que el proceso padre ejecuta la llamada al sistema wait () para leer el estado de salida del proceso muerto y otra información. Esto permite que el proceso principal obtenga información del proceso inactivo. Después de llamar a wait (), el proceso zombie se elimina completamente de la memoria.
Esto normalmente sucede muy rápido, por lo que no verá procesos zombies acumulados en su sistema. Sin embargo, si un proceso padre no está programado correctamente y nunca llama a wait (), sus hijos zombis permanecerán en la memoria hasta que se limpien.
Resolución:
No puede matar los procesos zombie como puede matar los procesos normales con la señal SIGKILL: los procesos zombie ya están muertos.
Una forma de matar zombies es enviando la señal SIGCHLD al proceso padre. Esta señal le dice al proceso padre que ejecute la llamada al sistema wait () y limpie a sus hijos zombies. Envíe la señal con el comando kill, reemplazando pid en el siguiente comando con el PID del proceso principal:
kill -s SIGCHLD pid
Cuando finaliza el proceso que creó los zombies, init hereda los procesos de zombies y se convierte en su nuevo padre. (init es el primer proceso iniciado en Linux en el arranque y se le asigna PID 1.)
Nota: - Desde Linux 3.4 en adelante, los procesos pueden emitir la llamada al sistema prctl () con la opción PR_SET_CHILD_SUBREAPER, y como resultado, no el proceso # 1, se convertirán en los padres de sus procesos descendientes huérfanos. Consulte: /unix//a/177361/5132
INIT luego ejecuta la llamada al sistema wait () para limpiar a sus hijos zombies, por lo que init hará un trabajo corto de los zombies. Puede reiniciar el proceso principal después de cerrarlo.