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

Restart a process if it is running in Bash

您好,我正在尝试检查进程 运行ning,如果是,请重新启动它。但如果不是,请启动它。该脚本是 运行 在使用 Plink 从 windows 机器远程执行了一批命令之后。然后我 运行 另一个 plink 命令到 运行 这个脚本。主机上的应用程序正在 运行ning continuosly。

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

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

我建议简单地、愚蠢地终止进程并检查 No process found 之类的错误消息(在这种情况下这并不是真正的错误)。

每次尝试在终止进程之前检查进程是否 运行 都容易出现竞争条件,这意味着进程可能会在您检查后立即启动。

问题是你已经将 pgrep 的所有输出发送到 /dev/null 离开那个简单的东西,它会起作用。 (已测试!)