Это зомби?
У меня есть некоторые сомнения относительно следующего кода.
#include <stdio.h>
#include <sys/types.h>
int main(void)
{
int pid=fork();
if(pid==0) sleep(5);
printf("Hello World %d %d\n",getpid(),pid);
if(pid>0) while(1){sleep(1);}
if(pid==0) printf("In child process!\n");
return 0;
}
Завершится ли когда-нибудь дочерний процесс? Он останется в состоянии зомби?
3 ответа
В вашем примере дочерний процесс умирает, но родитель не знает об этом exit
статус. Таким образом, ребенок (теперь зомби) остается в таблице процессов.
Более того, родитель продолжает ждать ребенка и продолжает бегать.
Да, это зомби... ваш дочерний процесс умирает, а ваш родитель не знает статус завершения дочернего процесса. и родительский процесс выполняется даже после смерти ребенка.
Процесс ZOMBIE: когда дочерний процесс умирает, родительский процесс все еще работает. в этом случае родительский процесс не знает статус выхода дочернего процесса.
Чтобы избежать этого родительского процесса использует wait
или же waitpid
знать child status
,
Добавление к другим ответам. Если произойдет обратное, то есть родитель умирает до завершения дочернего процесса, тогда ребенок станет сиротой и впоследствии будет "усыновлен" специальным системным процессом, называемым init.