按名稱而不是 pid 殺死多個進程

按名稱而不是 pid 殺死多個進程

我的工作是在 Ubuntu Server 14.04 上啟動 2-5 個命令副本。

我試圖找出最簡單的方法(即,如果可能的話,使用單一命令列而不是腳本)kill。真正的技巧是我正在使用安西布爾要跨數十台伺服器發送臨時命令,這就是為什麼呼叫每個進程非常耗時的原因。

例子:

ps aux | grep bash 
user 1031 0.0 0.0  4444  652 ?      Ss  Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ?      S   Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1   S   Aug15 0:00 -bash

現在從這裡開始,我要逃跑kill 1031 1032。是否有一個乾淨的命令可以完成工作?

答案1

@jjlin 答案可能有效。

pgrep/pkill但要解釋和的工作原理killall

基爾尋找行程名稱僅 - 這是在中看到的部分/proc/<pid>/comm

pgrep/pkill 預設是相同的,但也可以在參數中找到匹配項 (-f),這使其再次匹配/proc/<pid>/cmdline

基本上,預設僅ps -A考慮在中看到的字串。

例子:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

現在 -kilall/pkil sshd會起作用(故意打字錯誤,不要這樣做;)
但是killall /usr/sbin/sshd不行因為路徑不是進程名稱的一部分,
您可以檢查pgrep -lf sshd_config(即 pkill -f)

然後,還有其他需要考慮的事情。Killall可能只符合指令名稱的前 15 個位元組(請參閱 參考資料killall -e),無論是否需要正規表示式,或您想要利用進程組等。

注意:/proc/... 檔案是空分隔的,因此在複製/貼上期間要小心

答案2

你可以用這個。

ps aux | grep <your keyword> | grep -v grep | awk  '{print $2}' | xargs kill -9

列出符合的進程,過濾掉 grep 進程本身,取得 PID,將其傳遞給kill -9。

使用kill -9之前進行測試

答案3

嘗試

pkill start-cacheable.bash

答案4

您可以使用

killall <process name>

相關內容