linux下tomcat的shutdown命令杀不死进程

现象

在Linux下执行shutdown.sh 或者 catalina.sh stop,然后查看tomcat进程发现没有完全关闭;

网上查找出来解释:一般造成这种原因是因为项目中有非守护线程的存在(关于守护线程阅读下面文章)

java的守护线程与非守护线程

JAVA并发编程——守护线程(Daemon Thread)


 两个思路,1、从程序上根本解决。 2、从tomcat上解决

一: 从程序上解决(要求较高,项目底层代码的修改)

  在项目中找到对应new Thread的地方setDaemon(true),后面shutdown就没有tomcat进程了;

二: 从tomcat解决

  • 解决方案一:
#查找到所有的tomcat进程

$ ps -ef | grep tomcat

#然后逐一杀死它们

$ ps -9 pid
  • 解决方案二:

$ kill -9 `ps -ef|grep tomcat|awk '{print $2}'`
  • 解决方案三:

  基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程

 第一步 :vim修改tomcat下bin/catalina.sh文件,添加点东西,主要是记录tomcat的pid,如下:
#设置记录CATALINA_PID。

#该设置会在启动时候bin下新建一个CATALINA_PID文件

#关闭时候从CATALINA_PID文件找到pid,kill。。。同时删除CATALINA_PID文件

if [ -z "$CATALINA_PID" ]; then

      CATALINA_PID=$PRGDIR/CATALINA_PID

fi



第二步 vim tomcat的shutdown.sh文件,在最后一行加上-force:


方案三是最适合的(因为一台机器里可能有很多tomcat,不能kill所有吧)


验收结果:

启动tomcat,看到使用了CATALINA_PID

这里写图片描述

关闭tomcat,看到使用CATALINA_PID,kill了tomcat进程,同时删除了CATALINA_PID文件

这里写图片描述

查看tomcat进程,,,,无~~~~

这里写图片描述



猜你喜欢

转载自blog.csdn.net/tlk20071/article/details/79744271