进程如何成为 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 来标识。”
单一领导者,以及识别该领导者的非常具体的案例。