프로세스가 PGRP의 구성원이 되려면 어떻게 해야 합니까?
내 시도:프로세스는 PGRP 리더의 자식이어야 합니다. 그렇지 않으면 시스템 호출을 사용해야 합니다.setpgid().
추가로 두 가지 질문이 있습니다.
1) 팀장이 되는 과정은 어떻게 되나요? 자동으로 리더가 될 새로운 프로세스를 만드는 것만 고려할 수 있습니다.
2) 한 그룹에 리더가 여러 명 있을 수 있나요? 불가능하다고 생각하지만 이에 대한 정보를 찾을 수 없습니다.
내 대답이 맞나요?
답변1
새로운 프로세스를 만드는 것만 고려할 수 있습니다.자동으로 리더가 됩니다.
잘못된.
#include <stdio.h>
#include <unistd.h>
int main(void) {
pid_t pid;
pid = fork();
printf("%d member of %d\n", getpid(), getpgrp());
return 0;
}
새 프로세스는 상위 프로세스의 그룹을 공유합니다.
$ make leadership
cc -g leadership.c -o leadership
$ ./leadership
65617 member of 65617
65618 member of 65617
$
setpgid(2)
그룹이나 리더십에 대한 변경은 시스템 호출 이나 setsid(2)
유사한 시스템 호출을 통해서만 발생합니다 .
2) 한 그룹에 리더가 여러 명 있을 수 있나요?
잘못된. Stevens의 "UNIX 환경의 고급 프로그래밍"(2판) 9장 4절(243페이지)을 인용하면 다음과 같습니다.
"각 프로세스 그룹에는 프로세스 그룹 리더가 있을 수 있습니다. 리더는 프로세스 그룹 ID와 프로세스 ID가 동일하여 식별됩니다."
단일 리더와 해당 리더를 식별하는 매우 구체적인 사례입니다.