更新:trap
SIG
を削除する必要があります 一部のシェルはそれを含めることをサポートしていますが、条件付きのプレフィックス。以下のコメントを参照してください。
アンパサンド "&" は、新しいプロセスでバックグラウンドでコマンドを実行します。その親プロセス (あなたのケースでは bash スクリプトを実行するコマンド) が終了すると、このバックグラウンド プロセスはその親プロセスを init にリセットします (PID
のプロセス) 1) でも死なない。 ctrl+c
を押すと 、フォアグラウンド プロセスに割り込み信号を送信していますが、バックグラウンド プロセスには影響しません。
バックグラウンド プロセスを強制終了するには、kill
を使用する必要があります。 PID
を使用したコマンド $!
で取得できる最新のバックグラウンド プロセスの .
ctrl+c
を使用する場合 スクリプトとバックグラウンド プロセスの両方を強制終了するには、次のようにします。
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
SIGINT
のトラップ ハンドラを変更します (trap
SIG
を削除する必要があります 接頭辞ですが、一部のシェルはそれを含めることをサポートしている場合があります) したがって、スクリプトは $BGPID
でプロセスを強制終了します