Linuxkillall 給了我
killall 給了我找不到程序
但是 ps
kill
有人可以向我解釋和之間的區別killall
嗎?為什麼killall
看不到什麼ps
節目?# ps aux |grep db2 root 1123 0.0 0.8 841300 33956 pts/1 Sl 11:48 0:00 db2wdog db2inst1 1125 0.0 3.5 2879496 143616 pts/1 Sl 11:48 0:02 db2sysc root 1126 0.0 0.6 579156 27840 pts/1 S 11:48 0:00 db2ckpwd root 1127 0.0 0.6 579156 27828 pts/1 S 11:48 0:00 db2ckpwd root 1128 0.0 0.6 579156 27828 pts/1 S 11:48 0:00 db2ckpwd # killall db2ckpwd db2ckpwd: no process found # kill -9 1126 # kill -9 1127 # kill -9 1128
系統是 SuSe 11.3(64 位);核心 2.6.34-12;procps 3.2.8 版;來自 PSmisc 22.7 的 killall;從 GNU coreutils 7.1 殺死
這是在Linux上嗎?
實際上
ps
,killall
, 等使用的命令名稱有幾個微妙不同的版本。兩個主要變體是: 1) 長命令名,這是您在執行時得到的
ps u
;和 2) 短命令名稱,這是您在ps
沒有任何標誌的情況下執行時得到的名稱。如果您的程序是 shell 腳本或任何需要解釋器的程序,例如 Python、Java 等,則可能會發生最大的不同。
這是一個展示差異的非常簡單的腳本。我叫它
mycat
:#!/bin/sh cat
執行後,這是兩種不同類型的
ps
.首先,沒有
u
:$ ps -p 5290 PID TTY ... CMD 5290 pts/6 ... mycat
其次,與
u
:$ ps u 5290 USER PID ... COMMAND mikel 5290 ... /bin/sh /home/mikel/bin/mycat
請注意第二個版本如何以
/bin/sh
?現在,據我所知,
killall
實際上是讀取/proc/<pid>/stat
並抓取括號之間的第二個單詞作為命令名稱,所以這確實是您在執行時需要指定的內容killall
。從邏輯上講,這應該與ps
沒有u
標誌的內容相同,但最好檢查一下。檢查事項:
cat /proc/<pid>/stat
命令名稱是什麼?ps -e | grep db2
命令名稱是什麼?- 執行
ps -e | grep db2
並ps au | grep db2
顯示相同的命令名稱?筆記
如果您也在使用其他 ps 標誌,那麼您可能會發現使用
ps -o comm
查看短名稱和ps -o cmd
查看長名稱更簡單。您也可能會找到
pkill
更好的選擇。特別是,pkill -f
嘗試使用完整的命令名稱進行匹配,即由ps u
or列印的命令名稱ps -o cmd
。