ゾンビの子プロセスをクリーンアップするためにLinuxで親プロセスを終了するのはなぜですか?

ゾンビの子プロセスをクリーンアップするためにLinuxで親プロセスを終了するのはなぜですか?

この例を考えてみましょう -

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
  pid_t pid = fork();
  if (pid > 0)
  {
    printf("Child pid is %d\n", (int)pid);
    sleep(10);
    system("ps -ef | grep defunct | grep -v grep");
  }
  return 0;
}

この例では、子プロセスは親プロセスが終了するまでゾンビのままです。どのプロセスからも収集されず、このゾンビプロセスをどのようにクリーンアップしますか?

$ ./a.out 
Child pid is 32029
32029 32028  0 05:40 pts/0    00:00:00 [a.out] <defunct>

$ ps -p 32029 
  PID TTY          TIME CMD

ベストアンサー1

親プロセスが終了すると、子プロセスはそれを待ってプロセステーブルをクリーンアップするinit(pid = 1)によって継承されます。

おすすめ記事