Proceso zombie de Linux y su solución

  

Proceso zombie de Linux y su solución

1. Causa:

En el sistema UNIX, un proceso ha terminado, pero su El proceso principal no lo espera (espera /espera), se convertirá en un proceso zombie. Utilice el comando ps para ver su bandera con difunto. Un proceso zombie es un proceso que ya ha muerto, pero aún ocupa un espacio en la tabla de procesos.

Pero si el proceso padre del proceso finalizó primero, el proceso no se convertirá en un proceso zombie. Debido a que cada proceso finaliza, el sistema explora todos los procesos que se ejecutan en el sistema actual para ver si algún proceso es el hijo del proceso que acaba de finalizar. Si es así, el proceso Init se hace cargo y se convierte en él. El proceso padre, asegurando así que cada proceso tendrá un proceso padre. El proceso Init esperará automáticamente sus procesos secundarios, por lo que todos los procesos tomados por Init no se convertirán en procesos zombie.

2. Análisis de principios:

Cada proceso Unix tiene una entrada en la tabla de procesos. Toda la información utilizada por el proceso central para ejecutar el proceso se almacena en el punto de entrada. . Cuando usa el comando ps para ver la información del proceso en el sistema, ve los datos relevantes en la tabla de procesos. Cuando se crea un nuevo proceso con la llamada del sistema fork (), el proceso central asigna un punto de entrada al nuevo proceso en la tabla de procesos, y luego almacena la información relevante en la tabla de procesos correspondiente al punto de entrada. Uno de estos mensajes es el ID de su proceso padre.

El final del proceso hijo y la ejecución del proceso padre es un proceso asíncrono, es decir, el proceso padre nunca puede predecir cuándo finaliza el proceso hijo. Entonces, ¿es porque el proceso padre está demasiado ocupado para esperar el proceso hijo o no sabe cuándo finaliza el proceso hijo y pierde la información del estado al final del proceso hijo? No Debido a que UNIX proporciona un mecanismo para garantizar que mientras el proceso principal quiera conocer la información del estado al final del proceso secundario, puede obtenerla. Este mecanismo es: cuando el proceso hijo finalice su propio ciclo de vida, ejecutará la llamada al sistema exit () y el núcleo liberará todos los recursos del proceso, incluidos los archivos abiertos, la memoria ocupada, etc. Sin embargo, aún retiene cierta información (incluida la ID del proceso, el código de salida, el estado de salida del proceso, la cantidad de tiempo de CPU que lleva el proceso, etc.) y los datos se conservan hasta el sistema. Pasarlo a su proceso principal hasta que el proceso principal sea recuperado por wait /waitpid.

3. Solución:

(1) El proceso principal espera a que el proceso secundario finalice con funciones como wait y waitpid, lo que hace que el proceso principal se bloquee.

Al ejecutar la llamada del sistema wait () o waitpid (), el proceso secundario devolverá inmediatamente sus datos en la tabla de procesos al proceso principal después de la terminación, y el sistema eliminará inmediatamente el punto de entrada. En este caso, el proceso difunto no se generará.

(2) Si el proceso principal está ocupado, puede usar la función de señal para instalar el controlador para SIGCHLD. Una vez que finaliza el proceso hijo, el proceso padre recibirá la señal y el proceso de espera de llamada en el controlador.

(3) Si al proceso principal no le importa cuando finaliza el proceso secundario, puede usar la señal (SIGCLD, SIG_IGN) o la señal (SIGCHLD, SIG_IGN) para informar al núcleo que no está interesado en el final del proceso secundario, entonces el niño Una vez que finaliza el proceso, el kernel se recuperará y ya no enviará una señal al proceso principal

(4) bifurcación dos veces, el proceso principal procesa un proceso secundario y luego continúa trabajando, el proceso secundario procesa un proceso de nieto y luego sale, luego El proceso de Sun es asumido por init, y una vez finalizado el gran proceso, init se reciclará. Sin embargo, el proceso de reciclaje del niño debe hacerse por sí mismo.


Copyright © Conocimiento de Windows All Rights Reserved