スクリプト自体でスクリプトの複数のインスタンスを終了する

スクリプト自体でスクリプトの複数のインスタンスを終了する

複数の script.sh インスタンスが並列に実行され、同じ操作が実行され、バックグラウンドで実行されます。

実行時に現在実行中のすべてのスクリプトを終了する関数を使用しようとしています。

たとえば、./script.sh -start はスクリプトを起動し(複数のスクリプトを並列に実行できます)、./script.sh -kill を実行するとスクリプトのすべてのインスタンスが終了します。

f() {
    procName=`basename $0`
    pidsToKill=`ps -ef | grep $procName | grep -v grep | awk '{ print $2 }'`
    if [[ $pidsToKill ]]; then
        for i in $pidsToKill; do
            kill -9 $i
        done
        echo "Killed running scripts."
    else
        echo "No opened scripts to kill"
    fi
}

何らかの理由で複数のスクリプトが終了したり、エラーが返されることがあります。

私はこの問題の解決策を見つけましたが、なぜこれがうまくいかないのか知りたいです。どんなアイデアがありますか?

ベストアンサー1

台本が自殺することもあります。別のサブシェルでforループを実行して( for i in $pidsToKill; do kill -9 $i; done; echo All dead. ) &からスクリプトを終了できます。

おすすめ記事