驚くべきこと:Interactive Bashは別のプロセスグループでコマンドを実行します。

驚くべきこと:Interactive Bashは別のプロセスグループでコマンドを実行します。

驚くべきことに、少なくともBash 4.4.19以降、Interactive Bashは別々のセッションでコマンドを実行します。実行後、次のプロセスのリストを参照してくださいsleep 8888

PGID    PID       PPID
3150071 3150071  252603     -bash
3194323 3194323 3150071       sleep 8888

ofはbashと同じではありませんが、PPIDは同じであることPGIDがわかります。sleep

試験はUbuntu Bionicで実施した。

この動作の変更に関するドキュメントはありますか?それとも最初からいつもこんなことをしたのでしょうか?

別のセッションでコマンドを実行することは、bashが終了したときにSIGHUP効果がまったく発生しないことを意味します。おそらくこれが理由です。https://www.sobyte.net/post/2022-04/linux-nohup-setsid-disown/#about-説明する

実際、最新バージョンのbashでは、bashはSIGHUPコマンドをバックグラウンドプログラムに送信しません。これは、バックグラウンドで & で終わるすべてのプロセスが端末の SIGHUP 信号によって終了しないことを意味します。

編集:「セッション」の代わりに「プロセスグループ」という用語を使用する必要がありました。

答え1

厳密に言えば、ジョブ制御機能を備えた対話型 Bash はコマンドを個別に実行します。プロセスグループ、セッションの代わりに:

   SESS    PGID     PID    PPID COMMAND
1082760 3784151 3784151 1082760 bash
1082760 3784782 3784782 3784151 sleep 120

私が知っている限り、これは本当でした(少なくともBash 2.0以降)。 Bash 変更ログに関連する変更への参照が見つかりません。ジョブ制御が有効になっている場合、bashはユーザーがを押すとパイプを背景に移動できる必要があり、CtrlZそのために各パイプは異なるプロセスグループで実行されます。

バラより業務管理課Bashのマニュアルにあります。で述べたように信号部, Bash は関連プロセスグループにシグナルを明示的に送り返します。

関連情報