プロセスがPGRPのメンバーになるにはどうすればよいですか?
私の試み:プロセスはPGRPリーダーの子でなければなりません。それ以外の場合は、システムコールを使用する必要があります。setpgid()。
さらに2つの質問があります。
1) チーム長になる過程はどうなりますか? 自動的にリーダーになる新しいプロセスを作成することだけを考慮することができます。
2)1つのグループに複数のリーダーがいますか? 不可能だと思いますが、これに関する情報が見つかりません。
私の答えは正しいですか?
答え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)1つのグループに複数のリーダーがいますか?
間違っています。 Stevensの「UNIX環境の高度なプログラミング」(第2版)第9章4節(243ページ)を引用すると、次のようになります。
「各プロセスグループにはプロセスグループリーダーがあります。リーダーは、プロセスグループIDとプロセスIDが同じで識別されます。」
単一のリーダーとそのリーダーを識別する非常に具体的なケースです。