ウィキペディアは「終了するが、その親によって待たれることのない子プロセスはゾンビプロセスになる」と述べている。なぜゾンビプロセスが存在するのですか?
#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