从脚本本身杀死脚本的多个实例

从脚本本身杀死脚本的多个实例

我有几个 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

该脚本可能会自杀。您可以尝试在单独的子 shell 中运行 for 循环( for i in $pidsToKill; do kill -9 $i; done; echo All dead. ) &,然后退出脚本。

相关内容