부모가 사망할 때 자녀의 부모가 systemd로 설정되는 이유는 무엇입니까?

부모가 사망할 때 자녀의 부모가 systemd로 설정되는 이유는 무엇입니까?

나는 "Linux 커널 이해"라는 책을 읽었으며 장 중 하나에서는 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식의 부모가 initPID를 사용하여 프로세스 로 설정될 것이라고 주장합니다 1. 그런데 실제로 테스트해 보니 프로세스의 이름 systemd과 PID 로 설정되어 있는 것을 발견했습니다 1702(이는 임의적일 수 있고 일정하지 않은 것 같습니다).

이것을 테스트하는 데 사용한 코드는 다음과 같습니다.

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int 

main() {

    pid_t PID;
    pid_t parentPID;
    pid_t initPID;
    initPID = fork();

    if (initPID < 0) { exit(0); }
    if (initPID == 0) {
            PID = getpid();
            parentPID = getppid();
            printf("Child PID: %d, Parent PID: %d\n", PID, parentPID);
    }
    if (initPID != 0) {
            PID = getpid();
            parentPID = getppid();
            printf("Parent PID: %d, Parent of Parent PID: %d\n", PID, parentPID);
            exit(0);
    }

    PID = getpid();
    parentPID = getppid();
    printf("After death - Child PID: %d, Parent PID: %d\n", PID, parentPID);

}

프로그램을 컴파일하고 실행하여 다음과 같은 결과를 얻었습니다.

[$user]understand the kernel$ gcc child_states.c -o test
[$user]understand the kernel$ ./test 
Parent PID: 7245, Parent of Parent PID: 3698
Child PID: 7246, Parent PID: 7245
After death - Child PID: 7246, Parent PID: 1702
[$user]understand the kernel$ ps -ej | grep 1702
 1702  1702  1702 ?        00:00:00 systemd
 1703  1702  1702 ?        00:00:00 (sd-pam)
[$user]understand the kernel$

답변1

AFAIK systemd는 이전 init 시스템처럼 하위 프로세스가 이스케이프되어 PID1에 연결되는 것을 방지하기 위해 cgroup을 사용합니다. 이런 방식으로 추적성이 유지됩니다.

관련 정보