驚くべきことに、少なくとも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 は関連プロセスグループにシグナルを明示的に送り返します。