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
。