Kill -3 真的終止java進程嗎?或只是生成線程轉儲?

Kill -3 真的終止java進程嗎?或只是生成線程轉儲?

CentOS 5.9

如果我運行,kill -3 <java process pid>實際上會發生什麼?按照這篇紅帽文章,我知道產生了 Java Thread Dump,但進程是否已終止?它似乎不是基於我的測試:

[root@foobox ~]# kill -3 14559

[root@foobox ~]# service foo status
foo (pid 14559) is running...

換句話說:我可以透過這種方式收集線程轉儲而不影響服務嗎?

答案1

希望kill -3不會終止 JVM 進程。

在堆疊追蹤收集期間,執行緒轉儲對服務的影響非常輕微,尤其是在運行數千個執行緒的情況下。

請注意,如果-Xrs使用該標誌,JVM 不再專門處理該SIGQUIT訊號,然後該訊號可能會終止進程,除非在某些本機程式碼中存在替代處理程序。

答案2

https://superuser.com/questions/352147/what-does-kill-3-mean可能會為您提供更多資訊。

由進程決定當它接收到訊息時它將如何準確地做出反應SIGQUIT

由於該訊號可以被進程捕獲、忽略或阻止,因此它可能不尊重kill.如果你想更近距離地觀察,我建議在使用killstrace發送PID時使用堆疊追蹤PID SIGQUIT

相關內容