轉 :linux下tomcat的shutdown命令殺不死程序
阿新 • • 發佈:2022-04-13
tomcat在windows下可以直接關閉,但是貌似在Linux下有時候shutdown.sh 沒有關閉tomcat程序;國慶前最後一天沒事,解決你~~~~~~~~
現象:
在Linux下shutdown.sh ,然後檢視tomcat程序發現沒有完全關閉;
#檢視tomcat程序是否關閉語句
ps -ef | grep tomcat
實驗:(為什麼原來在Linux下沒有發現這個問題呢???)
實驗一:
安裝一個純淨的tomcat放在linux上,啟動—>檢視tomcat程序—>關閉–>檢視tomcat程序。。。。。。。。。。。發現關閉後沒有tomcat的程序啊啊啊
實驗二:
將專案丟進tomcat, 啟動—> 檢視程序—> 關閉—> 檢視程序。。。。。。。。tomcat的程序還在!!!!!!
網上查找出來解釋:一般造成這種原因是因為專案中有非守護執行緒的存在(關於守護執行緒閱讀下面文章)
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程序,,,,無~~~~