Shell Scripting - Vários IDs de processo em vez de um

Shell Scripting - Vários IDs de processo em vez de um

Estou escrevendo um script bash simples para desligar o Tomcat e, se ele não parar normalmente, verifique se o PID do Tomcat ainda existe e elimine-o.

Passo o nome do Tomcat como uma variável para o script conforme abaixo. Em alguns casos passo dois ou três nomes do tomcat, por isso o uso do FOR LOOP abaixo

./shutdown.sh tomcat1

Conteúdo do script 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"

Quando o Tomcat é desligado normalmente, não há problema. Mas quando o Tomcat não para, estou tendo problemas.

O trecho de código abaixo, quando executado diretamente no prompt de comando, fornece o ID do processo correto (62457) do Tomcat. Mas o mesmo pedaço de script de shell está me fornecendo três IDs de processo (62610,62611,62457).

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

você pode me dizer por que estou recebendo três IDs de processo no script em comparação com apenas um?

Alguma outra sugestão mais fácil de KILL?

informação relacionada