linux下tomcat的shutdown命令殺不死進程


詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt405

 

tomcat在windows下可以直接關閉,但是貌似在Linux下有時候shutdown.sh 沒有關閉tomcat進程

現象:

在Linux下shutdown.sh ,然后查看tomcat進程發現沒有完全關閉;

#查看tomcat進程是否關閉語句ps  -ef | grep tomcat    1212

實驗:(為什么原來在Linux下沒有發現這個問題呢???)

實驗一:

  安裝一個純凈的tomcat放在linux上,啟動—>查看tomcat進程—>關閉–>查看tomcat進程。。。。。。。。。。。發現關閉后沒有tomcat的進程啊啊啊

實驗二:

  將項目丟進tomcat, 啟動—> 查看進程—> 關閉—> 查看進程。。。。。。。。tomcat的進程還在!!!!!!

  網上查找出來解釋:一般造成這種原因是因為項目中有非守護線程的存在(關於守護線程閱讀下面文章)

  java的守護線程與非守護線程

  JAVA並發編程——守護線程(Daemon Thread)


解決:

  兩個思路,1、從程序上根本解決。 2、從tomcat上解決

一: 從程序上解決(要求較高,項目底層代碼的修改)

  在項目中找到對應new Thread的地方setDaemon(true),后面shutdown就沒有tomcat進程了;

二: 從tomcat解決

  • 解決方案一:

#查找到所有的tomcat進程$ ps -ef | grep tomcat#然后逐一殺死它們$ ps -9 pid12345671234567
  • 解決方案二:

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

  基本原理為啟動tomcat時記錄啟動tomcat的進程id(pid),關閉時強制殺死該進程

 第一步 :vim修改tomcat下bin/catalina.sh文件,添加點東西,主要是記錄tomcat的pid,如下:11
#設置記錄CATALINA_PID。#該設置會在啟動時候bin下新建一個CATALINA_PID文件#關閉時候從CATALINA_PID文件找到pid,kill。。。同時刪除CATALINA_PID文件if [ -z "$CATALINA_PID" ]; then       CATALINA_PID=$PRGDIR/CATALINA_PIDfi12345678910111234567891011

這里寫圖片描述

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

這里寫圖片描述

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


驗收結果:

啟動tomcat,看到使用了CATALINA_PID

這里寫圖片描述

關閉tomcat,看到使用CATALINA_PID,kill了tomcat進程,同時刪除了CATALINA_PID文件

這里寫圖片描述

查看tomcat進程,,,,無~~~~

這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM