Linux çekirdeği davranışını uzun zamandır araştırıyorum ve bana her zaman açıktı:
Bir süreç öldüğünde, tüm çocukları
initsonunda ölünceye kadar işleme (PID 1) geri verilir .
Ancak, son zamanlarda, çekirdekten benden çok daha fazla deneyime sahip biri bana şunu söyledi:
(Kullandığınız sürece süreç sonlandığında, tüm çocuklar da öldüğünde
NOHUPonlar geri almak bu durumdainit).
Şimdi, buna inanmasam da, emin olmak için hala basit bir program yazdım. Her şey sleepsüreç programlamasına bağlı olduğu için testler için zamana ( ) dayanmamam gerektiğini biliyorum , ancak bu basit durum için, bunun yeterli olduğunu düşünüyorum.
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;
}
İşte programın çıktısı, pssonuçta her printfgörüşmede ilgili sonuç :
$ ./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).
Şimdi, gördüğünüz gibi, beklediğim gibi davranıyor. Yetim işlemi (436), initölene dek (1) e geri verilir .
Ancak, bu davranışın varsayılan olarak uygulanmadığı UNIX tabanlı bir sistem var mı? Bir sürecin ölümünün hemen tüm çocuklarının ölümünü tetiklediği herhangi bir sistem var mı?