バックグラウンドプロセスとターミナルプロセスグループIDの理解

バックグラウンドプロセスとターミナルプロセスグループIDの理解

ジョブ制御に関するbashリファレンスマニュアルを読んでいました。ここ(強調):

タスク制御ユーザーインターフェースの実装を容易にするために、オペレーティングシステムは現在の端末プロセスグループIDの概念を維持しています。このプロセスグループのメンバー(プロセスグループIDが現在の端末のプロセスグループIDと同じプロセス)は、SIGINTなどのキーボード生成信号を受信します。これらのプロセスフロントにいるそうです。バックグラウンドプロセスとは、プロセスグループIDが端末プロセスグループIDと異なるプロセスを意味する。

これを確認するためにいくつかの実験を実行しようとしていますが、期待した結果は得られません。

2つのターミナルウィンドウが実行されています(マイプライマリターミナルは変更がある場合はそこから実行されます)zshbash

「実験」プロセスは次のとおりです。

  1. 端末Aで長いプロセスを実行するには、次を選択します。ping -c 4000 google.com
  2. 端末Bでpgid端末Aで実行されているpingを確認したら、端末Aと同じでなければなりません。
  3. 端末Aから一時停止文字を送信すると、pingが一時停止して端末Aの操作に追加される必要があります。
  4. pingコマンドを確認したら、pgid端末Aとは異なる必要があります。

プロセス情報を確認するには、次のコマンドを使用します。 ps -e --forest -o pid -o ppid -o comm -o pgid | grep -E 'bas|zsh|pin'

実際の結果
pingを見つめる前に

 287562  287551  |   \_ zsh      287562
 351151  287562  |   |   \_ bas  351151
 354401  287551  |   \_ zsh      354401
 354486  354401  |       \_ bas  354486

前景でpingを見た後:

 287562  287551  |   \_ zsh      287562
 351151  287562  |   |   \_ bas  351151
 354401  287551  |   \_ zsh      354401
 354486  354401  |       \_ bas  354486
 359864  354486  |          pin  359864 # shouldn't this be the same as bash above ?

保留中の信号を送信した後:

 287562  287551  |   \_ zsh      287562
 351151  287562  |   |   \_ bas  351151
 354401  287551  |   \_ zsh      354401
 354486  354401  |       \_ bas  354486
 359864  354486  |          pin  359864 # shouldn't this change after moving to the background?

私の質問は:なぜ親端末と同じ端末がpingないのですか?前景から背景に移動してもpingが変わらないのはなぜですか?pgid
pgid

ベストアンサー1

おすすめ記事