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

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

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程序,,,,無~~~~

轉:linux下tomcat的shutdown命令殺不死程序