5つの異なるタスクを実行するシェルスクリプトがバックグラウンドで実行されています。
シェルスクリプトを実行すると、5つのタスクすべてが順次実行され始めます。シェルを終了すると、シェルを終了しても実行中のプロセスは引き続き実行されます。
$ bash shell.sh & echo $!
これはシェルのPIDを提供するため、後で特定の時点でシェルを終了できます。
#!/bin/bash
JOB1
JOB2
JOB3
JOB4
JOB5
シェルが終了したら、シェルで実行されているすべてのプロセスを終了させるにはどうすればよいですか?
答え1
#!/bin/bash
declare -a bgpids
cleanup() {
for pid in "${bgpids[@]}"; do
kill -9 "$pid"
done
}
trap "cleanup" SIGINT SIGTERM
sometask &
bgpids+=("$!")