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

tomcat在windows下可以直接關閉,但是貌似在Linux下有時候shutdown.sh 沒有關閉tomcat進程;國慶前最後一天沒事,解決你~~~~

現象:

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

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

實驗:(爲什麼原來在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 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進程,,,,無~~~~

這裏寫圖片描述

發佈了66 篇原創文章 · 獲贊 24 · 訪問量 279萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章