我正在編寫一個簡單的 bash 腳本來關閉 tomcat,如果它沒有正常停止,則檢查 tomcat 的 PID 是否仍然存在並殺死它。
我將 tomcat 名稱作為變數傳遞給腳本,如下所示。在某些情況下,我傳遞兩個或三個 tomcat 名稱,這就是為什麼使用下面的 FOR LOOP
./shutdown.sh tomcat1
Shutdown.sh 腳本的內容
#!/bin/bash
for name in "$@"
do
bash /opt/$name/bin/shutdown.sh
done
sleep 30
for name in "$@"
do
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
if [ $process_id ]
then
kill -9 $process_id
fi
done
echo " Script Execution completed"
當 tomcat 正常關閉時,就沒有問題了。但是當 tomcat 不停止時,我就會遇到問題。
下面的程式碼直接在命令提示字元下執行時給出了正確的 tomcat 進程 ID(62457)。但同一個 shell 腳本給了我三個進程 ID(62610,62611,62457)。
process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`
你能告訴我為什麼我在腳本中得到三個進程 ID 而不是只有一個嗎?
還有其他更簡單的建議可以殺死嗎?