kill命令在Java應(yīng)用中使用的注意事項小結(jié)
前言
我們都知道,kill在linux系統(tǒng)中是用于殺死進程。
kill pid [..]
kill命令可將指定的信號發(fā)送給相應(yīng)的進程或工作。 kill命令默認使用信號為15,用于結(jié)束進程或工作。如果進程或工作忽略此信號,則可以使用信號9,強制殺死進程或作業(yè).
因此,如果確保將進程殺死,可以使用-9參數(shù)
kill -9 pid [..]
linux 中常見的信號
1 SIGHUP 掛起進程
2 SIGINT 終止進程
3 SIGGQUIT 停止進程
9 SIGKILL 無條件終止進程
15 SIGTERM 盡可能終止進程
17 SIGSTOP 無條件停止進程,但不是終止
18 SIGTSTP 停止或者暫停進程,但不終止進程
19 SIGCONT 繼續(xù)運行停止的進程
在Java中的應(yīng)用
創(chuàng)建一個SpringBoot的web應(yīng)用
啟動類如下,添加了一個鉤子函數(shù),當(dāng)進程關(guān)閉時,將會調(diào)用該鉤子函數(shù)。
@SpringBootApplication public class WebApplication { public static void main(String args[]){ SpringApplication.run(WebApplication.class,args); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { System.out.println("do ShutdownHook.......... "); } }); } }
使用maven打包。
mvn package
測試kill -3
啟動應(yīng)用
這里注意,如果使用相對路徑啟動應(yīng)用,則jps看到的進程名稱為jar,使用絕對路徑如下則顯示完整的jar名稱:web-1.0.jar。
java -jar ~/aProject/web/target/web-1.0.jar
查看進程pid
lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web 21060 web-1.0.jar
使用kill -3
lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill -3 21060
可以看到啟動界面打印了Java應(yīng)用的堆棧信息。打印的是收到-3信號時刻的線程信息。
如果使用以下方式啟動應(yīng)用
nohup java -jar ~/aProject/web/target/web-1.0.jar &
lgj@lgj-Lenovo-G470:~/aProject/web/target$ ls -l |grep nohup.out -rw------- 1 lgj lgj 22811 Jun 9 00:41 nohup.out
可以看到啟動所在的目錄多了一個文件nohup.out。該文件記錄了應(yīng)用啟動運行過程中的日志。
nohup 命令 & ;
&表示以后臺方式運行應(yīng)用。但如果退出關(guān)閉啟動的控制臺,進程將會停止。
nohup + &也是以后臺方式運行應(yīng)用,但是退出關(guān)閉啟動的控制臺,進程不會停止。且進程日志將會輸出到nohup.out中。
此時使用kill -3。打印的線程信息可以到該nohup.out中查看。
測試kill 和kill -9
啟動應(yīng)用
java -jar ~/aProject/web/target/web-1.0.jar
使用kill pid殺死進程
lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web 21470 web-1.0.jar lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill 21470 lgj@lgj-Lenovo-G470:~/aProject/web/target$
可以看到輸出日志中輸出了鉤子函數(shù)中所打印的
do ShutdownHook..........
2019-06-09 01:18:28.610 INFO 21470 --- [ main] com.demo.web.WebApplication : Started WebApplication in 4.585 seconds (JVM running for 5.274)
do ShutdownHook..........
2019-06-09 01:18:41.381 INFO 21470 --- [ Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
使用kill -9 pid殺死進程
lgj@lgj-Lenovo-G470:~/aProject/web/target$ jps | grep web 21568 web-1.0.jar lgj@lgj-Lenovo-G470:~/aProject/web/target$ kill -9 21568
最后的日志并沒有輸出鉤子函數(shù)中的內(nèi)容
2019-06-09 01:20:37.579 INFO 21568 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8452 (http) with context path ''
2019-06-09 01:20:37.585 INFO 21568 --- [ main] com.demo.web.WebApplication : Started WebApplication in 4.171 seconds (JVM running for 4.812)
Killed
總結(jié)
在使用kill操作java應(yīng)用時
1.kill -3 pid可以打印當(dāng)前進程的線程信息,但是不會關(guān)閉Java應(yīng)用!
2.kill pid 也就是kill -15 pid ,將會調(diào)用鉤子函數(shù)ShutdownHook,一般ShutdownHook中會進行一些操作,比如保存數(shù)據(jù),關(guān)閉連接等。
3.kill -9 pid.不會調(diào)用鉤子函數(shù)ShutdownHook。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
設(shè)置JavaScript自動提示-Eclipse/MyEclipse
自動提示需要2個組件,分別是:ext-4.0.2a.jsb2||spket-1.6.16.jar,需要的朋友可以參考下2016-05-05Sonar編譯問題對應(yīng):File [...] can''t be indexed twice.
今天小編就為大家分享一篇關(guān)于Sonar編譯問題對應(yīng):File [...] can't be indexed twice.,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12SpringBoot定時任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實現(xiàn)方法
本篇文章主要介紹了SpringBoot定時任務(wù)兩種(Spring Schedule 與 Quartz 整合 )實現(xiàn)方法,詳細的介紹了Spring Schedule 與 Quartz 整合的兩種方法,有興趣的可以了解一下。2017-03-03net.sf.json.JSONObject 為null 的判斷方法
下面小編就為大家?guī)硪黄猲et.sf.json.JSONObject 為null 的判斷方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02