Wikipedia는 "종료되지만 부모가 기다리지 않는 하위 프로세스는 좀비 프로세스가됩니다."라고 말합니다. 이 프로그램을 실행합니다 :왜 좀비 프로세스가 존재합니까?
#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);
}
}
}
이렇게하면 좀비 프로세스가 생성되지만 좀비 프로세스가 여기에 생성 된 이유를 이해할 수 없습니까?
프로그램의 출력은
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
....
.....
이다 그러나 이유는 "자식 프로세스가 종료하지만 부모에 의해 기다렸다되지"이 경우이다?
pid=fork();
if (pid==0) {
exit(0); // <--- zombie is created on here
} else {
// some parent code ...
}
이유 : 당신의 코드에서
당신이 묻는? 그것이 의미하는 바에 따르면, 내가보기에 당신의 질문에 대한 유일한 대답은 "좀비 프로세스가 정의 된 것이기 때문에"입니다. –
** "왜 좀비 프로세스가 여기에 만들어 졌는지 이해할 수 없습니다"** 자식의 종료 상태를 읽기 위해'wait() '를 호출하지 않았기 때문에 그 결과가 프로세스 테이블에 남아 있습니다 . –
그게 전부입니다. 그러나 아이가 얼마 동안 뛰고 어떤 좀비도 존재하지 않으면 – user567879