Я пишу простой 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 }'`
Можете ли вы объяснить, почему в скрипте я получаю три идентификатора процесса, а не один?
Есть ли еще более легкие предложения по УБИЙСТВУ?