프로세스가 프로세스 그룹의 구성원이 되는 방법은 무엇입니까?

프로세스가 프로세스 그룹의 구성원이 되는 방법은 무엇입니까?

프로세스가 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가 동일하여 식별됩니다."

단일 리더와 해당 리더를 식별하는 매우 구체적인 사례입니다.

관련 정보