実行中のシェルスクリプトを終了し、その中で実行中のすべてのプロセスを終了します。

実行中のシェルスクリプトを終了し、その中で実行中のすべてのプロセスを終了します。

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+=("$!")

関連情報