2

プロセスグループについてAPUEを読んでいます。その本は言う、

ほとんどのジョブ制御シェルでは、この関数 ( setpgid ) はforkの後に呼び出され、子に独自のプロセス グループ ID を設定させます。これらの呼び出しの 1 つは冗長ですが、両方を行うことで、いずれかのプロセスがこれが発生したと想定する前に、子プロセスが独自のプロセス グループに配置されることが保証されます。

私の理解を確認するために、次のコードを書きました。エラー処理は省略しています。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{        
    printf("process ID: %d\n", getpid());
    printf("process group ID: %d\n", getpgrp());
    exit(0);
}

出力 (シェルに直接実行):

プロセス ID: 4388
プロセス グループ ID: 4388

出力 (vim 内で実行):

process ID: 4401  
process group ID: 4400    // pid of vim (through ps) 

結果が異なるのはなぜですか?コマンドを実行するためにvimはシェルをフォークしませんか? もしそうなら、違いは何ですか、つまり、最初の出力のようにプロセスグループ ID がプロセス ID と等しくないのはなぜですか?

ところで、forkは常に子プロセスのプロセス グループ ID を自動的に設定しますか? 設定する前に子プロセスのプロセス グループ ID を出力しようとすると、親プロセスのプロセス ID が出力されました。

どうもありがとう。

4

1 に答える 1