在脚本中获取系统中 tomcat 进程的进程号但却输出多个结果

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在脚本中获取系统中 tomcat 进程的进程号但却输出多个结果相关的知识,希望对你有一定的参考价值。

异常

在脚本中使用了这么一句 ps -ef | grep tomcat | grep -v 'grep' | awk 'print $2' 用来获取系统中 tomcat 进程的进程号,但是结果却输出了多个进程号,导致后面的 kill 命令杀死 tomcat 进程失败。

但单独把这条语句放在命令行终端执行只会有一个进程号结果(注:前提是系统中只运行了一个 tomcat)。

原因

注意上面运行该脚本的命令是 ./tomcat-restart.sh,即当该脚本执行时,也会产生一个进程,也会被 ps -ef | grep tomcat 命令搜索到,因为 grep tomcat 就是搜索带有 tomcat 关键字的进程,而我们的脚本名中恰好有一个关键字是 tomcat,所以导致了这样的结果。

解决

解决方法一:对脚本进行重命名,使得脚本名不包含 tomcat 关键字。不推荐,因为脚本名要见名知意。

解决方法二:使用 pgrep java 命令去查找系统中的 tomcat 进程,但前提是系统中只运行了一个 java 进程,否则也会得到多个结果。

以上是关于在脚本中获取系统中 tomcat 进程的进程号但却输出多个结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在脚本中获取进程ID

如何在脚本中获取进程ID

tomcat优化脚本

Linux服务器中由于内存不足导致tomcat自动关闭解决方案

在bash脚本中获取命令的子进程

Shell脚本杀掉除自己外的旧进程