1. ホーム
  2. シェル

[解決済み】シェルスクリプトの終了時にバックグラウンドプロセスやジョブを強制終了するにはどうすればいいですか?

2022-04-03 02:10:45

質問

トップレベルのスクリプトが終了するときに、混乱を一掃する方法を探しています。

特に set -e スクリプトが終了するときにバックグラウンドのプロセスが終了してくれればいいのですが。

解決方法は?

混乱を一掃するため。 trap を使用することができます。これは、特定のシグナルが到着したときに実行されるもののリストを提供することができます。

trap "echo hello" SIGINT

が、シェルが終了したときに何かを実行するために使用することもできます。

trap "killall background" EXIT

ビルトインなので help trap を実行すると情報が得られます (bash で動作します)。バックグラウンドのジョブだけを殺したい場合は、次のようにします。

trap 'kill $(jobs -p)' EXIT

シングル ' をシェルに代入されないようにするためです。 $() をすぐに実行します。