シェルスクリプトが終了したときにバックグラウンドプロセス/ジョブを強制終了するにはどうすればいいですか? 質問する

シェルスクリプトが終了したときにバックグラウンドプロセス/ジョブを強制終了するにはどうすればいいですか? 質問する

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

特に を使用する場合はset -e、スクリプトが終了したときにバックグラウンド プロセスが終了することを望みます。

ベストアンサー1

これは私にとってはうまくいきました(コメントのおかげで改善されました):

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
  • kill -- -$$プロセス グループ全体にSIGTERM を送信し、子孫も終了します。 <PGID>in はkill -- -<PGID>グループ プロセス ID で、多くの場合、変数に含まれる PID になりますが、必ずしもそうとは限りません。 PGID と PID が異なる場合、スクリプトで PGID を取得できる他の同様のツール$$を使用できます。ps

    たとえば、pgid="$(ps -o pgid= $$ | grep -o '[0-9]*')"PGID を に格納します$pgid

  • 使用時にシグナルを指定するEXITと便利ですset -e(詳細はこちら)。

おすすめ記事