あなたが探しているのは、背景のシェルとそれらを殺す方法です。
最初のステップは、これらのスクリプトをソーシングするのではなく、バックグラウンドにフォークすることです。それらを調達すると、そのコードが現在のスクリプトに挿入されるだけです。
したがって、次のようなことができます。
# '&' forks a script into the background
/path/script1.sh &
/path/script2.sh &
/path/script3.sh &
...
# now when you need to make sure that they are all killed
kill $(jobs -p)
の説明source
3 つのスクリプトがある場合:
script.1.sh:
echo "hello world"
script.2.sh:
source script.1.sh
source script.1.sh
script.3.sh:
echo "hello world"
echo "hello world"
script.3.sh と script.2.sh の間に機能上の違いはありません。なし。どちらも 1 つのシェル プロセスを使用し (echo は組み込み)、echo "hello world" を 2 回続けて呼び出します。
script4.sh:
script.1.sh &
script.1.sh &
これは違います。2 つのバックグラウンド スクリプト (プロセス ID は異なりますが、両方とも script.1.sh と呼ばれます) をフォークし、これらのバックグラウンド プロセスのそれぞれが「hello world」をエコーして終了します。同じように見えますが、この場合、メイン スクリプトから非同期で実行されているため、実際にはそのうちの 1 つを強制終了できます。