Bashで実行すると、サブシェルが終了した( sleep 123 &)
ときsleep 123
にプロセスが実行され続けます。sleep 123
親シェルとサブシェルが終了する前にプロセスを停止するにはどうすればよいですか?
合計を受け取り、sleep 123
プロセスが終了することを確認しようとしています。はいを探しています。SIGHUP
SIGCONT
SIGHUPは孤児プロセスに転送されますが、なぜ終了しないのですか?そしてデフォルトでは、カーネルは孤立して停止したプロセスを含むプロセスグループにSIGHUPを送信してすべてのプロセスを終了しますか?
答え1
これは、説明したい動作を示しています。
(sleep 60 & kill -STOP $!)
これはsleep
バックグラウンドに入り、停止します。SIGHUP
サブシェルが終了すると終了します。
シグナルは一部のシステムコールを中断する可能性があります。signal(7)
マンページ(具体的には、「シグナルハンドラがシステムコールとライブラリ機能を中断します」セクション)。特に使用されるシステムコールは、シグナルハンドラが呼び出されるとsleep
中断されます。これについては、次の文書で説明します。sleep(3)
。