Linuxカーネルの動作をかなり長い間研究してきましたが、次のことが常に明らかでした。
プロセス・ダイは、そのすべての子がバックに与えられている場合には
init
、プロセス(PID 1)彼らは最終的に死ぬまで。
しかし、最近、カーネルについて私よりもはるかに多くの経験を持っている人が私に言った:
プロセスが終了すると、そのすべての子も死にます(使用
NOHUP
した場合を除き、子はに戻りますinit
)。
今、私はこれを信じていませんが、私はそれを確かめるためにまだ簡単なプログラムを書きました。sleep
すべてがプロセスのスケジューリングに依存しているため、テストに時間()に依存するべきではないことを知っていますが、この単純なケースでは、それで十分だと思います。
int main(void){
printf("Father process spawned (%d).\n", getpid());
sleep(5);
if(fork() == 0){
printf("Child process spawned (%d => %d).\n", getppid(), getpid());
sleep(15);
printf("Child process exiting (%d => %d).\n", getppid(), getpid());
exit(0);
}
sleep(5);
printf(stdout, "Father process exiting (%d).\n", getpid());
return EXIT_SUCCESS;
}
これはプログラムの出力であり、話すps
たびに関連する結果がありますprintf
:
$ ./test &
Father process spawned (435).
$ ps -ef | grep test
myuser 435 392 tty1 ./test
Child process spawned (435 => 436).
$ ps -ef | grep test
myuser 435 392 tty1 ./test
myuser 436 435 tty1 ./test
Father process exiting (435).
$ ps -ef | grep test
myuser 436 1 tty1 ./test
Child process exiting (436).
今、あなたが見ることができるように、これは私がそれを期待していたように非常に振る舞います。孤立プロセス(436)はinit
、死ぬまで(1)に戻されます。
ただし、この動作がデフォルトで適用されないUNIXベースのシステムはありますか?プロセスの死がすぐにそのすべての子の死を引き起こすシステムはありますか?