次のメソッドを実行します。
$ (sleep 123 &)
$ jobs
$
sleep 123
Bashからプロセスグループを削除する働くコントロール?上記の方法とその時の方法disown
の違いは何ですか?プロセスsleep 123
は、まだ消えているサブシェルが率いる同じプロセスグループにあり、対話型シェルと同じプロセスセッションにあるため、同じ制御端末を共有します。
シェルのジョブ制御に属していないということは、sleep 123
プロセスがbashプロセスから送信された信号(SIGHUPを含む)を受信しないことを意味しますか?
ありがとうございます。
答え1
はい、言うと削除されました。
対話型bashスクリプトでサブシェルを実行すると、端末のフォアグラウンドプロセスグループとなる新しいプロセスグループ(タスク)が作成され、(たとえば)で終了するコマンドを含むサブシェルの(...)
場合、 。非常に&
sleep 3600 &
同じフォアグラウンドプロセスグループ、ここで、およびSIGINT
はSIGQUIT
無視され、対応する入力は/dev/null
)からリダイレクトされます。バラよりここ標準へのいくつかのリンク。
サブシェルが終了すると、(...)
フォアグラウンドジョブはシェルジョブリストから削除され、コマンドsleep 3600
はシェル制御の外部で実行され続けます。
(sleep 3600 &)
これは非対話型で実行するのとまったく異なります。スクリプト(...)
すべて(メインシェル、サブシェル、およびサブシェルfoo &
の内側または外側の「バックグラウンド」コマンド()(...)
)が同じプロセスグループで実行されるジョブ制御はありません。