프로세스를 이중 분기할 때 분리된 프로세스가 여전히 동일한 프로세스 그룹에 있습니까?

프로세스를 이중 분기할 때 분리된 프로세스가 여전히 동일한 프로세스 그룹에 있습니까?

제목의 보너스 질문으로 프로세스 그룹이 자손을 가질 수 있습니까?

답변1

실험을 통해 아주 쉽게 알 수 있습니다. 나는 여기서 "이중 십자가"가 당신이 의미하는 것이라고 가정하고 있습니다오직이중 교잡. 다음 프로그램을 고려해보세요:

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

int main(void)
{
    printf("original pid/pgid: %d/%d\n", getpid(), getpgrp());

    if (fork() != 0) { return 0; }
    printf("after first fork pid/pgid: %d/%d\n", getpid(), getpgrp());

    if (fork() != 0) { return 0; }
    printf("after second fork pid/pgid: %d/%d\n", getpid(), getpgrp());

    return 0;
}

프로그램은 프로세스 ID와 프로세스 그룹 ID를 인쇄하고 분기하고 하위 프로세스가 이를 다시 인쇄하고 다시 분기한 다음 하위 프로세스가 다시 인쇄합니다.

프로그램 실행 예:

$ ./a.out
original pid/pgid: 7306/7306
after first fork pid/pgid: 7307/7306
after second fork pid/pgid: 7308/7306

보시다시피 프로세스 그룹 ID는 분기 간에 변경되지 않습니다.

답변2

Google에서 빠르게 다시 확인해 보면 다음과 같습니다 man getpgrp.

https://linux.die.net/man/2/getpgrp

fork(2)를 통해 생성된 하위 프로세스는 상위 프로세스의 프로세스 그룹 ID를 상속합니다. PGID는 execve(2)에 유지됩니다.

즉, 각 하위 프로세스의 프로세스 그룹은 자동으로 상위 프로세스와 동일합니다. 따라서 기본적으로 손자는 동일한 프로세스 그룹을 공유합니다.

관련 정보