Shell 腳本 - 多個進程 ID 而不是一個

Shell 腳本 - 多個進程 ID 而不是一個

我正在編寫一個簡單的 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 而不是只有一個嗎?

還有其他更簡單的建議可以殺死嗎?

相關內容