如何使用 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

相關內容