如何使用 Bash 脚本检查应用程序是否正在运行?

如何使用 Bash 脚本检查应用程序是否正在运行?

我的主文件夹中有一个 gnome 运行的应用程序。我现在已经添加了当我按Meta+时要运行的应用程序R(我将其添加到CCSM)。我通过在我的主文件夹中执行来运行该应用程序./gnome-run
我在 的输出中找不到任何应用程序进程的痕迹ps -A

问题是,如果我打开 gnome-run 程序并按下组合键,我希望应用程序关闭。有没有办法创建一个 bash 文件来检查应用程序是否正在运行?如果是则关闭它,否则启动它。

答案1

这个 shell 脚本应该处理任何程序的启动和停止:

#!/bin/bash

BASECMD=${1%%\ *}
PID=$(pgrep "$BASECMD")
if [ "$?" -eq "0" ]; then
    echo "at least one instance of "$BASECMD" found, killing all instances"
    kill $PID
else
    echo "no running instances of "$BASECMD" found, starting one"
    $1
 fi

假设您将其保存在 下~/mystarter,您可以使用它运行任何命令~/mystarter <name>,例如,在您的情况下,将Meta+绑定R到:

~/mystarter gnome-run

并确保脚本可执行:chmod u+x ~/mystarter.另外,最好将其放在您的某个位置PATH,这样您就不必每次都键入它的完整位置。

gnome-run至于没有出现在 中的事实ps -A,请确保 gnome run 本身不是启动实际进程的脚本。检查ps -A | wc -l启动前后是否有差异(这会计算所有正在运行的进程)。

编辑:

既然您已经接受了答案,我想我应该添加对运行具有命令行参数的命令的支持,以便这可能成为一个参考点。运行如下命令:

 ./mystarter 'cmd args'

例如:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'

该命令只是查找它是否已在运行,但在未运行ncmpcpp时执行完整命令(带参数) 。ncmpcpp

相关内容