zombies zombie ventajas sleeping procesos proceso huerfano estado desventajas c linux operating-system fork zombie-process

ventajas - Crea un proceso zombie



procesos sleeping linux (1)

Citando:

To my understanding, zombie process happens when the parent process exits before the children process.

Esto está mal. De acuerdo con el man 2 wait (ver NOTAS):

A child that terminates, but has not been waited for becomes a "zombie".

Por lo tanto, si desea crear un proceso zombie, después de la fork(2) , el proceso hijo debería exit() , y el proceso principal debe sleep() antes de salir, lo que le da tiempo para observar la salida de ps(1)

Por ejemplo, puede usar el siguiente código en lugar del suyo, y usar ps(1) mientras sleep() ing:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(void) { pid_t pid; int status; if ((pid = fork()) < 0) { perror("fork"); exit(1); } /* Child */ if (pid == 0) exit(0); /* Parent * Gives you time to observe the zombie using ps(1) ... */ sleep(100); /* ... and after that, parent wait(2)s its child''s * exit status, and prints a relevant message. */ pid = wait(&status); if (WIFEXITED(status)) fprintf(stderr, "/n/t[%d]/tProcess %d exited with status %d./n", (int) getpid(), pid, WEXITSTATUS(status)); return 0; }

Estoy interesado en crear un proceso zombie. A mi entender, el proceso de zombie ocurre cuando el proceso principal se cierra antes de que los niños procesen. Sin embargo, traté de recrear el proceso zombie usando el siguiente código:

#include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main () { pid_t child_pid; child_pid = fork (); if (child_pid > 0) { exit(0); } else { sleep(100); exit (0); } return 0; }

Sin embargo, este código sale justo después de ejecutar lo que se espera. Sin embargo, como lo hago

ps aux | grep a.out

Descubrí que a.out se está ejecutando como un proceso normal, en lugar de un proceso zombie como esperaba.

El sistema operativo que estoy usando es ubuntu 14.04 64 bit