쉘 스크립팅 - 하나가 아닌 여러 프로세스 ID

쉘 스크립팅 - 하나가 아닌 여러 프로세스 ID

Tomcat을 종료하기 위한 간단한 bash 스크립트를 작성 중입니다. 정상적으로 중지되지 않으면 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)가 표시됩니다. 그러나 쉘 스크립트의 동일한 부분은 세 개의 프로세스 ID(62610,62611,62457)를 제공합니다.

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

스크립트에 1개의 프로세스 ID가 있는 것과 비교하여 3개의 프로세스 ID가 나타나는 이유를 알려주실 수 있나요?

KILL에 대한 다른 더 쉬운 제안이 있습니까?

관련 정보