Wikipedia mówi: "Proces potomny, który kończy się, ale nigdy nie jest oczekiwany przez jego rodzica, staje się procesem zombie". Uruchomę ten program:Dlaczego istnieją procesy zombie?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid, ppid;
printf("Hello World1\n");
pid=fork();
if(pid==0)
{
exit(0);
}
else
{
while(1)
{
printf("I am the parent\n");
printf("The PID of parent is %d\n",getpid());
printf("The PID of parent of parent is %d\n",getppid());
sleep(2);
}
}
}
To tworzy proces zombie, ale nie mogę zrozumieć, dlaczego proces zombie jest tutaj tworzony?
Wyjście programu jest
Hello World1
I am the parent
The PID of parent is 3267
The PID of parent of parent is 2456
I am the parent
The PID of parent is 3267
The PID of parent of parent is 2456
I am the parent
....
.....
Ale dlaczego jest tak, że „proces dziecko kończy, ale nie czekał na jego rodzica” w tym przypadku?
Pytasz dlaczego pojęcie proces zombie został wprowadzony w Unix? W tej chwili jedyną odpowiedzią na twoje pytanie, które widzę, jest "ponieważ tak zdefiniowano procesy zombie". –
** "nie można zrozumieć, dlaczego proces zombie jest tutaj tworzony" ** To dlatego, że nie wywołujesz 'wait()', aby odczytać status wyjścia dziecka, i dlatego jego wpis został pozostawiony w tabeli procesu . –
To jest w porządku. Ale kiedy dziecko biegnie przez jakiś czas i istnieje nie ma żadnego zombie – user567879