Bash腳本自動關閉給定程序名稱的程序
正如您可能已經從標題中猜到的那樣,我正在嘗試編寫一個 bash 腳本來關閉給定程序名稱的所有程序,但這樣做的經驗接近 0。我發現的是:
ps -aux | grep $processToClose
我可以使用名稱獲取所有程序,但是為了殺死它們我只是手動使用:
kill -9 $processPID
關於如何自動化程序終止部分的任何想法?
(如果你想知道我為什麼要做這樣的事情:我在我的工作筆記型電腦和日常 PC 上使用 anydesk,所以我只能使用一個,但有時(基本上每天)anydesk 選擇不工作,所以我有使用我上面寫的命令關閉它)
這
pkill
就是為了。pkill regexp
殺死(與 SIGTERM 類似
kill
,您通常不想使用 SIGKILL (9))名稱(由ps
or報告ps -o comm
)與正則表達式匹配的程序。pkill -f regexp
對於那些由
ps -f
(或ps -o comm
或您的 BSD 樣式ps aux
)報告的 arglist(假設他們或他們的祖先之一已執行命令)與擴展的正則表達式匹配的人。添加正
-x
則表達式的選項以匹配整個名稱/參數列表。例如,這樣會pkill -x xterm
殺死正在執行的程序,xterm
而不是正在執行lxterm
的xterminator
程序pkill xterm
。因此,要殺死名稱儲存
$processToClose
並假設$processToClose
不包含正則表達式運算符(\|$^*()+[]{}.?
)的程序:pkill -x -- "$processToClose"
如果它包含或可能包含正則表達式運算符,則需要使用以下命令對其進行轉義
\
:LC_ALL=C pkill -x -- "$( printf '%s\n' "$processToClose" | LC_ALL=C sed 's/[][\\|$^*()+{}.?]/\\&/g')"
這裡還將兩者的語言環境設置為 C,
pkill
並sed
允許在使用者語言環境中不一定形成有效文本的程序名稱。要查看哪些程序
pkill
會殺死,您可以替換pkill
為pgrep -l
.
pgrep
/pkill
不是標準命令,但很常見。
ps
是標準的,但非常不便攜。選項列表和輸出格式因實現而異。特別是,您ps -aux
可能只會使用(通常在基於 Linux 的系統上找到的)的procps
實現。ps
那是 BSD 風格,但前面ps aux
有一個雜散。-
POSIX 指定的選項列表非常有限。
ps -A -o pid= -o comm= | NAME=$processToClose awk ' NF == 2 && $2 "" == ENVIRON["NAME"] {print $1}' | xargs kill
假設
$processToClose
和程序名稱不包含空格將是一種標準方法。