1

次のコードについて疑問があります。

#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;
}

子プロセスは終了しますか? ゾンビ状態のままでしょうか?

4

3 に答える 3

1

はい、ゾンビです...子プロセスが終了し、親は子プロセスの終了ステータスを知りません。子が死んでも親プロセスは実行されています。

ZOMBIE プロセス: 子プロセスが終了しても、親プロセスは引き続き実行されます。この場合、親プロセスは子の終了ステータスを知りません。
この親プロセスを回避するにはwait、 .waitpidchild status

于 2013-09-19T11:07:11.083 に答える
1

他の応答に追加..逆のことが発生した場合、つまり子プロセスが完了する前に親が死亡した場合、子は孤児になり、後でinitと呼ばれる特別なシステムプロセスによって「採用」されます。

于 2013-09-21T05:52:11.740 に答える