2011-06-14 51 views
2

我有兩個進程具有相同的名稱但PID不同。我需要找出這兩個中具有最低PID的進程並殺死它。我怎麼做?使用Unix中最低的PID來殺死進程

+0

是否需要自動化解決方案?或者你只是想看看ps的輸出來獲得pid? – 2011-06-14 11:35:01

回答

6

有點做作,但是這不會把戲(使用bash爲例):

pidof bash | grep -o "[0-9]*" | sort -n | sed '1q' 

pidof bash | tr -s " " "\n" | sort -n | sed '1q' 

記住, 「最低PID」 並不真正意味着除非你沒有足夠的流程從最大值到最低值再次使用,否則任何與啓動順序有關的事情。一個更好的(也可能更復雜的)方法是殺死較舊的進程或較新的進程,具體取決於哪一個是壞的。

您可以在這裏找到一些靈感How do you kill all Linux processes that are older than a certain age?

0

Unix或* nix中有/ proc目錄?

如果您有/ proc支持,請通過/ proc/[0-9] +/cmdline解析以查找其命令與您正在查找的進程相匹配的進程;目錄名稱(在/ proc之後)是id。

opendir()和readdir()將是您通過目錄解析的工具。

如果你沒有/ proc支持,你可以popen(「ps -options here」,「r」);讀取ps的輸出(以及適合您的系統的任何選項)來解析整個進程列表。