サブシェルが終了する前にSIGSTOPに従ってサブシェルのサブプロセスを停止する方法は?

サブシェルが終了する前にSIGSTOPに従ってサブシェルのサブプロセスを停止する方法は?

Bashで実行すると、サブシェルが終了した( sleep 123 &)ときsleep 123にプロセスが実行され続けます。sleep 123親シェルとサブシェルが終了する前にプロセスを停止するにはどうすればよいですか?

合計を受け取り、sleep 123プロセスが終了することを確認しようとしています。はいを探しています。SIGHUPSIGCONTSIGHUPは孤児プロセスに転送されますが、なぜ終了しないのですか?そしてデフォルトでは、カーネルは孤立して停止したプロセスを含むプロセスグループにSIGHUPを送信してすべてのプロセスを終了しますか?

答え1

これは、説明したい動作を示しています。

(sleep 60 & kill -STOP $!)

これはsleepバックグラウンドに入り、停止します。SIGHUPサブシェルが終了すると終了します。

シグナルは一部のシステムコールを中断する可能性があります。signal(7)マンページ(具体的には、「シグナルハンドラがシステムコールとライブラリ機能を中断します」セクション)。特に使用されるシステムコールは、シグナルハンドラが呼び出されるとsleep中断されます。これについては、次の文書で説明します。sleep(3)

関連情報