
我的工作是在 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>