제목의 보너스 질문으로 프로세스 그룹이 자손을 가질 수 있습니까?
답변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)에 유지됩니다.
즉, 각 하위 프로세스의 프로세스 그룹은 자동으로 상위 프로세스와 동일합니다. 따라서 기본적으로 손자는 동일한 프로세스 그룹을 공유합니다.