Это зомби?

У меня есть некоторые сомнения относительно следующего кода.

#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.

Другие вопросы по тегам