异常
在脚本中使用了这么一句 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 进程,否则也会得到多个结果。