我有几个 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. ) &
,然后退出脚本。