我有一个脚本foo
,如果提供了一个参数“cc>”,除此之外,背景中的一个脚本start
,并且退出-ccc>包含一个无限循环。
在稍后的阶段,我想用参数bar
调用bar
,我希望脚本foo
,它仍然在后台运行,停止运行。
实现这一目标的教科书方法是什么?
最佳答案
如果多个bar
实例可以同时运行,并且foo stop
应该停止/杀死它们,请使用pkill
:
$ pkill bar
终止所有名为
bar
的进程。如果只允许运行一个
bar
实例,那么使用“pidfile”的解决方案是可行的。在
foo
中:pidfile=/var/run/bar.pid
if ((start)); then
if [ -e "$pidfile" ]; then
echo "$pidfile exists."
# clean-up, or simply abort...
exit 1
fi
bar &
echo $! >"$pidfile"
fi
if ((stop)); then
if [ ! -e "$pidfile" ]; then
echo "$pidfile not found."
exit 1
fi
kill "$(<"$pidfile")"
rm -f "$pidfile"
fi