Es un proceso que ha completado su ejecución pero aún tiene una entrada en la tabla de procesos, permitiendo al proceso que le ha creado leer el estado de su salida. Metafóricamente, el proceso hijo ha muerto pero su “alma” (el valor de retorno de la operación) aún no ha sido recogida.
Complicado de entender cierto? con este ejemplo entenderan mejor.
Línea 8: hace un fork(), el proceso actual (padre) genera un nuevo proceso (hijo) ambos son “idénticos”
Línea 11: esta sólo será ejecutada por el proceso hijo y casualidades de la vida, es un exit(0) así que el proceso hijo acaba de morir.
Pero el proceso padre sigue, línea 13 y se suspende durante 2 minutos, desentendiéndose del hijo que acaba de morir, de hecho el padre podría intentar recoger el resultado devuelto por el hijo (un 0) pero no lo hace.
El proceso hijo, está “muerto” el resultado 0 que aún está disponible para el padre si éste lo quiere, aún no ha sido recibida por nadie así que el proceso hijo no ha terminado de morir “del todo”. Está en modo zombie.
- Ahora guarda el código anterior con el nombre de prueba.c y compila así: gcc -o prueba prueba.c y lo ejecutamos de la siguiente forma:
$ ./prueba
y veras algo como lo siguiente.
La (Z) es indicador de modo zombie en el proceso. El padre (PID=12851) está durmiendo (S).Código HTML:$ ps auxww| grep prueba jonathan 12851 0.0 0.0 1624 296 pts/1 S+ 14:58 0:00 ./prueba jonathan 12852 0.0 0.0 0 0 pts/1 Z+ 14:58 0:00 [prueba] <defunct> jonathan 12862 0.0 0.0 3236 792 pts/2 R+ 14:58 0:00 grep prueba








Citar
