나는 꽤 오랫동안 리눅스 커널 동작을 연구 해 왔으며 항상 나에게 분명하다.
프로세스가 죽으면 모든 자식은 프로세스가
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 기반 시스템이 있습니까? 프로세스의 사망이 모든 아동의 사망을 즉시 유발할 수있는 시스템이 있습니까?