`(sleep 123&)` bashのジョブ制御からプロセスグループを削除しますか?

`(sleep 123&)` bashのジョブ制御からプロセスグループを削除しますか?

次のメソッドを実行します。

$ (sleep 123 &)
$ jobs
$ 

sleep 123Bashからプロセスグループを削除する働くコントロール?上記の方法とその時の方法disownの違いは何ですか?プロセスsleep 123は、まだ消えているサブシェルが率いる同じプロセスグループにあり、対話型シェルと同じプロセスセッションにあるため、同じ制御端末を共有します。

シェルのジョブ制御に属していないということは、sleep 123プロセスがbashプロセスから送信された信号(SIGHUPを含む)を受信しないことを意味しますか?

ありがとうございます。

ベストアンサー1

はい、言うと削除されました。

対話型bashスクリプトでサブシェルを実行すると、端末のフォアグラウンドプロセスグループとなる新しいプロセスグループ(タスク)が作成され、(たとえば)で終了するコマンドを含むサブシェルの(...)場合、 。非常に&sleep 3600 &同じフォアグラウンドプロセスグループ、ここで、およびSIGINTSIGQUIT無視され、対応する入力は/dev/null)からリダイレクトされます。バラよりここ標準へのいくつかのリンク。

サブシェルが終了すると、(...)フォアグラウンドジョブはシェルジョブリストから削除され、コマンドsleep 3600はシェル制御の外部で実行され続けます。

(sleep 3600 &)これは非対話型で実行するのとまったく異なります。スクリプト(...)すべて(メインシェル、サブシェル、およびサブシェルfoo &の内側または外側の「バックグラウンド」コマンド()(...))が同じプロセスグループで実行されるジョブ制御はありません。

おすすめ記事