プロセスグループを変更する
setpgrp
は PID に指定された pid のプロセスに対して、
プロセスグループ ID (以降、pgid と呼ぶ) を変更します。
PID に 0
を指定すると、現在のプロセスが対象になります。
PGRP にはセットしたい pgid を指定します。
PGRP に 0
を指定すると、自身の pid と同じ値が pgid としてセットされます。
引数をすべて省略すると、setpgrp 0, 0
として処理されます。
setpgrp
は、fork
を使って子プロセスを生成した際に、
その子プロセスのプロセスグループを親プロセスと異なるグループにしたい場合に使われます。
次のサンプルコードは、まず親プロセスの pid と pgid を表示します。
そして子プロセスをフォークします。
通常、プロセスをフォークすると、親プロセスと子プロセスの pgid は同じになります。
このサンプルコードでは、子プロセスで setpgrp
を使って pgid を変更します。
そして、子プロセスの pid と pgid を表示します。
# 親プロセスの pid と gid を表示
print '親: pid=', $$, ', gid=', getpgrp(0), "\n";
# 子プロセスをフォーク
my $pid = fork();
# 子プロセスの処理
unless ($pid) {
# 子プロセスの gid を変更する
setpgrp 0, 0;
# 子プロセスの pid と gid を表示
print '子: pid=', $$, ', gid=', getpgrp(0), "\n";
}
wait;
上記サンプルコードを実行すると、次のような結果が出力されます。
親: pid=148, pgid=148
子: pid=149, pgid=149
setpgrp
のおかげで、子プロセスの pgid が親プロセスの pgid から変更され、
子プロセスの pid と同じ値にセットされていることが分かります。