Shell-Scripting - Mehrere Prozess-IDs statt einer

Shell-Scripting - Mehrere Prozess-IDs statt einer

Ich schreibe ein einfaches Bash-Skript, um Tomcat herunterzufahren. Wenn dies nicht ordnungsgemäß geschieht, prüfe ich, ob die PID von Tomcat noch vorhanden ist, und beende sie.

Ich übergebe den Tomcat-Namen als Variable an das Skript, wie unten dargestellt. In manchen Fällen übergebe ich zwei oder drei Tomcat-Namen, weshalb die Verwendung von FOR LOOP unten

./shutdown.sh tomcat1

Inhalt des Shutdown.sh-Skripts

#!/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"

Wenn Tomcat ordnungsgemäß herunterfährt, gibt es kein Problem. Aber wenn Tomcat nicht stoppt, habe ich Probleme.

Der folgende Codeabschnitt gibt mir, wenn er direkt in der Eingabeaufforderung ausgeführt wird, die korrekte Prozess-ID (62457) von Tomcat. Aber derselbe Abschnitt im Shell-Skript gibt mir drei Prozess-IDs (62610,62611,62457).

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

können Sie mir erklären, warum ich im Skript drei Prozess-IDs und nicht nur eine erhalte?

Gibt es einen anderen, einfacheren Vorschlag zum TÖTEN?

verwandte Informationen