getpgrp

プロセスグループを取得する

構文

解説

getpgrp は、PID に指定したプロセスのプロセスグループ ID を返します。 現在のプロセスのプロセスグループ ID を取得したいなら、PID0 を指定します。

my $pgid = getpgrp(0);

なお、同じプロセスグループのプロセスは同じシグナルを同時に受けることができます。 通常、fork で生成した子プロセスは、 親プロセスと同じプロセスグループ ID を持ちます。

次のサンプルコードは、まず自身のプロセスグループ ID と自身のプロセス ID を出力します。 そして、fork で 3 つの子プロセスを生成します。 子プロセスでも、自身のプロセスグループ ID と自身のプロセス ID を出力します。

# 親プロセスのプロセスグループ ID と自身のプロセス ID
print 'Parent: getpgrp=', getpgrp(0), ', $$=', $$, "\n";

my @pids;

for ( my $i = 0 ; $i < 3 ; $i++ ) {

    # 子プロセスをフォーク
    $pids[$i] = fork();

    # 子プロセスの処理
    unless ( $pids[$i] ) {
        sleep( $i + 1 );
        print 'Child: getpgrp=', getpgrp(0), ', $$=', $$, "\n";
        exit 0;
    }
}

# すべての子プロセスが終了するのを待つ
for my $pid (@pids) {
    waitpid( $pid, 0 );
}

上記コードを実行すると、次のような結果が出力されます。

Parent: getpgrp=104, $$=104
Child: getpgrp=104, $$=105
Child: getpgrp=104, $$=106
Child: getpgrp=104, $$=107

親プロセスと子プロセスすべてでプロセスグループ ID (104) が同じことが分かります。

getpgrp は Windows では利用できません。 "The getpgrp function is unimplemented" のようなエラーが出力されますので注意してください。