ric*_*hie 6 bash gnome process-management pgrep
我的主文件夹中有一个 gnome-run 应用程序。我现在已经添加了当我按下Meta+时运行的应用程序R(我在CCSM 中添加了它)。我通过./gnome-run
在我的主文件夹中执行来运行应用程序。
我在ps -A
.
问题是,如果我打开 gnome-run 程序并按下组合键,我希望应用程序关闭。有没有办法创建一个 bash 文件来检查应用程序是否正在运行?如果它然后关闭它,否则启动它。
这个 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
在未运行时执行完整的命令(带参数)。