如果应用程序正在运行,我如何检查 Bash 脚本?

ric*_*hie 6 bash gnome process-management pgrep

我的主文件夹中有一个 gnome-run 应用程序。我现在已经添加了当我按下Meta+时运行的应用程序R(我在CCSM 中添加了它)。我通过./gnome-run在我的主文件夹中执行来运行应用程序。
我在ps -A.

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

rom*_*ovs 6

这个 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
Run Code Online (Sandbox Code Playgroud)

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

~/mystarter gnome-run
Run Code Online (Sandbox Code Playgroud)

并确保脚本是可执行的:chmod u+x ~/mystarter。此外,最好将它放在您的PATH.

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

编辑:

既然您已经接受了答案,我想我会添加对运行具有命令行参数的命令的支持,以便这可能成为参考。像这样运行命令:

 ./mystarter 'cmd args'
Run Code Online (Sandbox Code Playgroud)

例如:

./mystarter 'ncmpcpp -c ~/.ncmpcpp'
Run Code Online (Sandbox Code Playgroud)

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