Скрипты оболочки — несколько идентификаторов процесса вместо одного

Скрипты оболочки — несколько идентификаторов процесса вместо одного

Я пишу простой bash-скрипт для завершения работы tomcat. Если процесс не останавливается корректно, то проверяю, существует ли еще PID tomcat, и завершаю его.

Я передаю имя 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 не останавливается, у меня возникают проблемы.

Ниже приведен фрагмент кода, запущенный непосредственно в командной строке, дает мне правильный идентификатор процесса (62457) tomcat. Но тот же фрагмент в скрипте оболочки дает мне три идентификатора процесса (62610,62611,62457).

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

Можете ли вы объяснить, почему в скрипте я получаю три идентификатора процесса, а не один?

Есть ли еще более легкие предложения по УБИЙСТВУ?

Связанный контент