我正在編寫一個腳本來殺死同一進程的所有實例。由於它將用於Linux,AIX,HP-UX和Solaris,我只需要使用內置的bash(sh)函數。這就是爲什麼killall
,pkill
等不適合我。計算進程數並殺死它們
一旦只有一個,應該在傳統的方式剛剛殺了一個過程的實例:
kill -TERM `ps -ef | grep -v grep | grep $process | awk '{print $2}'`
但是有時候程序額外的實例上運行,這就是爲什麼ps -ef | …
回報比一個PID多。這需要報告。
例如:
bash-3.2$ ps -ef | grep -v grep | grep perl | awk '{print $2}'
5267
5268
5269
5270
5271
我的想法是爲這些值存儲在臨時變量,然後發送終止信號,以各自在for循環。
bash-3.2$ tmp=`ps -ef | grep -v grep | grep perl | awk '{print $2}'`
bash-3.2$ echo $tmp
5267 5268 5269 5270 5271
但是,如果發生這樣的情況(有多少實例存在),我仍然需要這些信息。 看來我需要檢查存儲在tmp
變量中的整個字符串,並可能計數空格嗎?
無論如何,這些問題會減少到如何檢查$tmp
變量存儲多少個值?
你可以只用一個計數器在循環告訴你如家快捷很多特效被打死。 – John3136
'ps -ef'是否便攜? –
@glennjackman [是](http://pubs.opengroup.org/onlinepubs/7990989775/xcu/ps.html)(但在當前POSIX + OpenGroup規範中標記爲XSI)。 – Gilles