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=pidnotを使用してプロセスにシグナルを送信しているようPGID=pidです。
私は正しい軌道に乗っていますか?はいの場合、キーの組み合わせがプロセスを強制終了するのはなぜPGIDですかPID?