进程如何成为进程组的成员?

进程如何成为进程组的成员?

进程如何成为 PGRP 的成员?

我的尝试:进程需要是 PGRP 领导者的子进程,否则我们需要使用系统调用设置pgid()

另外,还有两个问题。

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 来标识。”

单一领导者,以及识别该领导者的非常具体的案例。

相关内容