如果进程在Bash中运行,请重新启动进程

时间:2016-03-03 14:22:53

标签: bash grep kill restart

您好我正在尝试检查进程是否正在运行,如果是,请重新启动它。但如果不是,那就开始吧。在使用Plink从Windows机器远程执行一批命令后运行该脚本。然后我运行另一个plink命令来运行这个脚本。主机上的应用程序正在连续运行。

SERVICE="./Snowflake.app/Contents/MacOS/Snowflake"

if pgrep "$SERVICE" >/dev/null 2>&1 ; 
then
echo "$SERVICE is running"
pkill "$SERVICE"
 else
  /Applications/snowflake/run.sh

fi

这里的问题是,如果应用程序是打开的,它不会关闭它,而是第二次打开应用程序。谁能告诉我哪里出错?

2 个答案:

答案 0 :(得分:1)

我建议简单地,愚蠢地杀死进程并检查错误消息,如No process found(在这种情况下这不是真正的错误)。

每次尝试在杀死进程之前检查进程是否正在运行都会出现竞争情况,这意味着进程可能会在您检查后立即开始。

答案 1 :(得分:-1)

问题是你已经将pgrep的所有输出发送到/ dev / null 保持简单,它将起作用。 (测试!)