Shell 脚本 - 多个进程 ID 而不是一个

Shell 脚本 - 多个进程 ID 而不是一个

我正在编写一个简单的 bash 脚本来关闭 tomcat,如果它不能正常停止,则检查 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)。但 shell 脚本中的同一段代码给出了三个进程 ID(62610、62611、62457)。

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

您能告诉我为什么我在脚本中得到了三个进程 ID 而不是一个吗?

还有其他更容易杀死的建议吗?

相关内容