Linux
如何在 pid 未知時終止 Linux 中的後台程序?
我有一個包含以下程式碼的作業調度程序 bash shell 腳本:
for (( i=0; i<$toBeDoneNum; i=i+1 )) do while true do processNum=`ps aux | grep Checking | wc -l` if [ $processNum -lt $maxProcessNum ]; then break fi echo "Too many processes: Max process is $maxProcessNum." sleep $sleepSec done java -classpath ".:./conf:./lib/*" odx.comm.cwv.main.Checking $i done
我在後台執行這樣的腳本:
./dispatcher.sh &
我想用
kill -9
. 但是我第一時間沒有記錄dispatcher程序的pid。我使用了工作jobs -l
、jobs -r
和jobs -s
。什麼也沒顯示。即使這樣fg
也不能將程序帶到前台。fg bash: fg: current: no such job
但我認為這個調度程序程序仍在執行,因為它仍然繼續分配 java 程序執行(已使用頂部和
ps -ef
檢查)。我應該如何終止這個作業調度程序 bash shell 腳本程序?
您應該能夠使用該
pkill
命令按名稱殺死腳本。$ pkill -9 dispatcher.sh
摘自手冊頁
pgrep, pkill - look up or signal processes based on name and other attributes OPTIONS -signal --signal signal Defines the signal to send to each matched process. Either the numeric or the symbolic signal name can be used. (pkill only.)
有關更多資訊,請參見手冊頁。
pkill
尋找過程
如果您發現您不再知道某個程序的程序 ID (PID),您可以通過多種方式找到它。
pgrep
您可以使用
pgrep
按名稱查找程序。$ pgrep dispatcher.sh 12345
然後,您可以執行
kill -8 12345
.ps
大多數人學會了使用
ps
. 您可以像這樣在輸出中查找您的程序。$ ps -eaf | grep [d]ispatcher.sh saml 2735 1 0 Jan11 ? 00:02:50 dispatcher.sh
PID 是輸出中的第二列(通常)。上面我包裝我正在尋找的過程的第一個字母的技巧消除
grep
了結果中的出現。不帶方括號試試看我的意思。