Grep

如何殺死所有具有給定名稱的程序?

  • December 2, 2020

我執行命令ps -A | grep <application_name>並獲取這樣的程序列表:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

我想殺死列表中的所有程序:19440, 21630, 22694.

我已經嘗試過ps -A | grep <application_name> | xargs kill -9 $1,但它適用於錯誤。

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

我怎樣才能優雅地做到這一點?

pkill -f 'PATTERN'

將殺死模式PATTERN匹配的所有程序。使用該-f選項,將考慮整個命令行(即包括參數)。如果沒有該-f選項,則只會考慮命令名稱。

另請參閱man pkill您的系統。

問題是ps -A | grep <application_name> | xargs -n1返回這樣的輸出

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

您可以使用**awk先獲取一列ps輸出**。

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

將返回 PID 列表

19440
21630
22694

並添加kill -9 $1你有一個殺死所有 PID 的命令

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

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