[root@ADM01B ~]# ps -ef|grep iesmgr
root 5929 5321 0 09:38 pts/7 00:00:00 grep iesmgr
root 9798 1 0 Jun28 ? 00:00:05 iesmgr
[root@ADM01B ~]# kill -9 5929
-bash: kill: (5929) - 沒有那個進程
[root@ADM01B ~]# kill -9 9798
[root@ADM01B ~]#
當我在linux系統下查詢某個程序的進程時出現兩個進程,進程號分別為5929和9798
我想把該進程殺掉 kill -9 5929,但是顯示沒有那個進程,然后我又殺掉9798這個進程kill -9 9798,成功殺掉了。
對此現象疑惑不解。為啥有這個進程,kill的時候有顯示沒有。
最后通過查資料知道,ps -ef|grep iesmgr命令其實是分兩步完成的。第一步執行ps -ef查詢所有進程,第二步執行grep iesmgr過濾出進程中帶有iesmgr關鍵字的進程。
這樣就出現了一個問題:其中grep iesmgr這個命令本身執行的時候也是個進程,並且也帶有關鍵字iesmgr。所以也會顯示出來,這其實是grep進程,而不是iesmgr進程。grep進程在命令執行完之后就結束了,所以kill該進程的時候顯示-bash: kill: (5929) - 沒有那個進程 。
如果不想顯示grep進程怎么辦,可以使用下面的命令:
# ps -ef|grep iesmgr |grep -v grep
grep的-v參數是取反,也就是說grep -v grep是過濾掉那些帶grep關鍵字進程,即把grep iesmgr這個進程過濾掉。
補充:
-
ps命令
ps [選項]
下面對命令選項進行說明:
-e 顯示所有進程。
-f 全格式。
-h 不顯示標題。
-l 長格式。
-w 寬輸出。
a 顯示終端上的所有進程,包括其他用戶的進程。
r 只顯示正在運行的進程。
u 以用戶為主的格式來顯示程序狀況。
x 顯示所有程序,不以終端機來區分。 -
grep命令
grep [options]
[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大 小寫(只適用於單字符)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字符的文件名。
-n:顯示匹配行及 行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行。
