bashスクリプトから立ち上がったプロセスを残さず殺す


最近こういう現象に悩まされていました。

- bashスクリプトからとあるプロセスを起動
   ※このプロセスが終了するまでbashスクリプトは終了しない

- プロセスが終わる前にbashスクリプトのPIDをkill

- bashスクリプトは終了するが、プロセスが生き残る

bashにはtrapといって、割り込みが発生した時に実行させるコマンドを指定する事ができます。その仕組みを使い、bashから生成されたプロセスをkillされた時に終了させるようにします。

#!/bin/bash
trap 'kill $(jobs -p)' EXIT
./start_process

これでとりあえず目的は達成しました。ただし、bashスクリプトを-9でkillするとtrapは動作しないので注意が必要です。