Linux システムのシグナルについて、簡単な質問が 1 つあります。私が理解しているように、すべてのプロセスには と がPID
ありPGID
ます。プロセスを作成すると、それは uniquePID
になります。関数を使用して新しいプロセスをフォークするとfork()
、子プロセスは異なるPID
が同じになりPGID
ます。
さて、コード
#include<stdio.h>
#include<unistd.h>
int main()
{
int i=3;
int j;
for(j=0;j<i;++j)
{
if (fork() == 0)
{
while(1)
{
}
}
}
printf("created\n");
while(1)
{
}
return 0;
}
このプログラムをコンパイルしてコマンドで実行すると
./foo
彼が子を作成するので少し待ってください。私が作成するCTRL-C
とps aux
、親と子がなくなっていることがわかります。
./foo
フォークが完了するのを待ち、他の端末で行う
kill -INT <pid_of_foo>
ps aux
親がいなくなったことがわかりますが、子供たちはまだ生きていて、私の CPU を食べています。
よくわかりませんCTRL-C
が、あるプロセスグループにあるすべてのプロセスにシグナルをKILL -SIGNAL pid
送信し、コマンドがPID=pid
notを使用してプロセスにシグナルを送信しているようPGID=pid
です。
私は正しい軌道に乗っていますか?はいの場合、キーの組み合わせがプロセスを強制終了するのはなぜPGID
ですかPID
?