我已经看到了一些建议,如果脚本的另一个实例已经在运行,我可以如何终止脚本。我的问题是相反的:我想找到一种方法来杀死同一脚本的所有其他实例(如果有的话)并继续执行我的脚本。有什么办法可以做到这一点吗?
答案1
您可以执行类似...的操作PIDS=$(pidof -x nameofyourscript)
来获取所有 pid(如果有),包括脚本。然后你就可以kill $PIDS
编辑:由于上面的内容也会杀死您当前的脚本,然后修改答案,添加-o
如下选项:PIDS=$(pidof -x -o $$ nameofyourscript)
这-o $$
将使其省略当前脚本的 pid。
更好的是,不用硬编码 nameofyourscript,只需从以下位置获取它自己的名称$0
:
kill $(pidof -x -o $$ $0)
因此,请将其放在脚本的开头附近,也许可以使用2>/dev/null
,以防它找不到其他实例,并且问题得到解决。
答案2
在你的脚本中:
# store the Process ID here
pidfile=/var/run/mypid.local
# If there's a stored PID, terminate with SIGKILL
[[ -f $pidfile ]] && kill -s 9 $(cat $pidfile)
# Save our PID for the next run to kill
echo "$$" >$pidfile
并且,在你之前进行清理exit
,
rm $pidfile