Linux

kill -3 實際上會終止 java 程序嗎?或者只是生成一個執行緒轉儲?

  • November 10, 2015

CentOS 5.9

如果我執行kill -3 <java process pid>實際會發生什麼?根據這篇紅帽文章,我了解生成了 Java 執行緒轉儲,但程序是否終止?它似乎不是基於我的測試:

[root@foobox ~]# kill -3 14559

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

換句話說:我可以通過這種方式收集執行緒轉儲而不影響服務嗎?

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

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

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

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

由流程決定它在收到時將如何準確地做出反應SIGQUIT

由於該信號可以被程序擷取、忽略或阻止,因此它可能不遵守kill. 如果您想更近距離地對等,我建議在使用 killstrace發送 PID 時堆棧跟踪 PID。SIGQUIT

引用自:https://serverfault.com/questions/537635