Proceso zombie Linux

  
 

Alguien puede darse cuenta de que después de que un proceso salga, el proceso no desaparece de inmediato, dejando una estructura de datos llamada zombie. En los cinco estados del proceso de Linux, el proceso zombie es un tipo muy especial: ha abandonado casi todo el espacio de memoria, no tiene código ejecutable, no se puede programar, solo mantiene una posición en la lista de procesos, registra el proceso. La información como el estado de salida es recopilada por otros procesos, y el proceso zombie ya no ocupa ningún espacio de memoria.

La razón del proceso zombie, volviendo a Unix, los diseñadores de Unix no están diseñando esto porque no tienen nada que ver con las cosas geniales. Como se mencionó anteriormente, el proceso zombie contiene mucha información que es muy importante para los programadores y administradores de sistemas. Primero, ¿cómo muere este proceso? ¿Es una salida normal, o hay un error, o se ve obligado a retirarse por otros procesos? En otras palabras, ¿cuál es el código de salida para este programa? Segundo, ¿cuál es el tiempo total de CPU del sistema y el tiempo total de CPU del usuario ocupado por este proceso? El número de fallos de página y el número de señales recibidas. Esta información se almacena en el proceso zombie. Imagínese si no hay un proceso zombie, cuánto tiempo se ejecuta el proceso. No sabemos, una vez que sale, toda la información relacionada se borra inmediatamente del sistema, y ​​si el proceso principal o El administrador del sistema necesita usarlo, así que tengo que parpadear.


Entonces, después de que el proceso finalice, el sistema cambiará el estado del proceso a Zombie, y luego le dará tiempo para esperar a que el proceso primario recopile su información de salida, ya que el proceso principal puede ser Ocupado con otras cosas no se puede recopilar, por lo que el uso del estado Zombie indica que el proceso sale y está a la espera de que el proceso principal recopile información.

El proceso de Zombie no puede ser claro con el comando kill, porque el proceso ha sido cancelado. Si necesita limpiar dicho proceso, debe borrar su proceso principal o esperar un tiempo prolongado para que el núcleo lo elimine. Debido a que el proceso de Zombie también ocupa un número de ID de proceso, si hay muchos de esos procesos, no es propicio para la programación de procesos del sistema.

Aquí, veamos un ejemplo:
/* zombie.c * /# include < sys /types.h > #include < unistd.h > main () {pid_t pid; pid = fork (); if (pid < 0) {/* Si el error es * /printf (" error ocurrido \\ n " quot;);} else if (pid == 0) {/* Si es un proceso secundario * /Exit (0);} else {/* Si es el proceso principal * /sleep (60); /* sleep 60 seconds * /wait (NULL); /* collect zombie process * /}}

Compile este programa: < Br> $ cc zombie.c -o zombie

Ejecute el programa en segundo plano para que podamos ejecutar el siguiente comando
$ ./zombie &[1] 1217

enumerar los procesos en el sistema
$ ps -ax ... ... 1137 pts /0 S 0:00 -bash1217 pts /0 S 0:00 ./zombie1218 pts /0 Z 0:00 [zombie] 1578 pts /0 R 0:00 ps - Axe

donde "Zor" es el sello distintivo del proceso zombie, lo que significa que el proceso 1218 ahora es un proceso zombie.

La recopilación de información sobre los procesos de Zombie y la terminación de estos procesos de zombie requiere que usemos las llamadas a la espera y las llamadas de espera en el proceso principal. El rol de ambos es recopilar información dejada por el proceso zombie mientras el proceso desaparece por completo.

Copyright © Conocimiento de Windows All Rights Reserved