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