プログラムを最初から実行する場合、bash
私のプログラムはシェルと同じプロセスグループに属していますか、それとも新しいプロセスグループに属していますか?
シェルを作成するとき氏、信号を処理する必要がありますSIGINT
。
Ctrl+はフォアグラウンドにありますが、同じプロセスグループに属するプロセスにシグナルを送信しますC。SIGINT
Bashセッションを終了できません。
答え1
bash-4.3$ ps -j | cat
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4600 4600 4586 pts/1 00:00:00 ps
4601 4600 4586 pts/1 00:00:00 cat
bash-4.3$ ps -j; ps -j
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4602 4602 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4603 4603 4586 pts/1 00:00:00 ps
インタラクティブシェル働くこれはプロセスグループを通じて達成される。対話型シェルジョブを実行するためのプロセスグループが作成されます。対話型シェルは、プロセスグループと実際に混在する唯一のコマンドです。
上記はps -j | cat
(フロント)業務です。両方ps
がcat
同じプロセスグループにある場合、シェルはそれを端末のフォアグラウンドプロセスグループにし、^C
SIGINTをそれらに送信します。
2番目の例では、2つの連続した操作があります。
存在する
bash-4.3$ (ps -j; ps -j)
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4634 4633 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4635 4633 4586 pts/1 00:00:00 ps
サブシェルは職業です。サブシェル自体は非対話型シェルと見なすことができます。