如果 运行 在 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
离开那个简单的东西,它会起作用。 (已测试!)
您好,我正在尝试检查进程 运行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 离开那个简单的东西,它会起作用。 (已测试!)