シェルスクリプト - 1 つのプロセス ID ではなく複数のプロセス ID

シェルスクリプト - 1 つのプロセス ID ではなく複数のプロセス ID

私は Tomcat をシャットダウンするための簡単な bash スクリプトを書いています。正常に停止しない場合は、Tomcat の PID がまだ存在するかどうかを確認し、それを強制終了します。

以下のように、スクリプトに変数としてTomcat名を渡します。いくつかの例では、2つまたは3つの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) が返されます。ただし、シェル スクリプト内の同じコードでは、3 つのプロセス ID (62610、62611、62457) が返されます。

process_id=`ps -ef | grep $name | grep -v grep | awk '{ print $2 }'`

スクリプトでプロセス ID が 1 つではなく 3 つ取得される理由を教えていただけますか?

他にもっと簡単に殺せる提案はありますか?

関連情報