1. 程式人生 > >解決linux下tomcat的shutdown命令殺不死程序

解決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的程序還在!!!!!!

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

解決:

  兩個思路,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程序,,,,無~~~~

這裡寫圖片描述