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