Bash

如果應用程序正在執行,如何檢查 Bash 腳本?

  • September 23, 2020

我的主文件夾中有一個執行 gnome 的應用程序。我現在已經添加了當我按下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

假設您將其保存在 下~/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未執行時執行完整的命令(帶參數)。

引用自:https://unix.stackexchange.com/questions/35484