2014-11-25 67 views
0

好吧,所以我最近遇到了一個案例,我最後得到了我不需要的重複過程。現在很明顯,我試圖弄清楚爲什麼我會以重複的方式結束,但同時我想知道是否有更好的方法來清除它們。killall,不包括具體的進程ID

目前我正在運行killall <process name>,然後手動觸發進程的單個實例。但是,我真正想要做的是運行killall,它以某種方式忽略了特定的進程ID。

實際上,有問題的過程是一個帶有獨特名稱的bash腳本,所以我可以很容易地用killall殺死它的所有重複項,並且我想編輯它,以便在啓動時它將殺死所有除了當前進程($$)之外的其他自身實例,以便更容易。

我知道我大概可以用psgrep做到這一點,並過濾掉當前的進程ID後的結果反饋到kill,但是這是唯一的辦法,還是有更好的選擇(除了防止重複第一地方,我還沒有想出)?

回答

0

這是你要找的東西嗎?

殺$(ps的輔助| awk的「{打印$ 2}」 | grep的-v)

+0

你是不是指'grep -v「$$」'去結束那裏?這或許可以在開始時使用合適的過濾器。例如,要整合@ Konato_K的答案可能是這樣的:'pgrep「$(basename」$ 0「)」| grep -v「$$」'就足夠了?它可能需要通過'xargs'然後被送入'殺死',雖然? – Haravikk 2014-11-27 10:58:18

1

我建議使用pgrep相反,它會給你指定名稱的進程的PID的列表,這樣你就可以做一些像pgrep java,並獲得列表比容易與ps和grep