setpgrp

プロセスグループを変更する

構文

解説

setpgrpPID に指定された pid のプロセスに対して、 プロセスグループ ID (以降、pgid と呼ぶ) を変更します。 PID0 を指定すると、現在のプロセスが対象になります。 PGRP にはセットしたい pgid を指定します。 PGRP0 を指定すると、自身の 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 と同じ値にセットされていることが分かります。