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 时使用堆栈跟踪。SIGQUIT

相关内容