Java 如何找出JVM在linux上忽略kill-15(SIGTERM)的原因?
我正在工作的jvm上执行Java 如何找出JVM在linux上忽略kill-15(SIGTERM)的原因?,java,linux,jvm,Java,Linux,Jvm,我正在工作的jvm上执行kill-15,它似乎完全被忽略了 环境是: Linux 2.6内核 jdk 1.6.0_20-x86-64 项目中没有对sun.misc.SignalHandler的引用。我所掌握的唯一(相当蹩脚的)线索是调用main中的AbstractApplicationContext.RegisterSutdownhook()。JVM启动参数不包含任何与信号处理相关的内容 日志中没有任何内容(调试级别),也没有针对kill-15打印到stdout的内容 如何找出忽略SIGTE
kill-15
,它似乎完全被忽略了
环境是:
- Linux 2.6内核
- jdk 1.6.0_20-x86-64
sun.misc.SignalHandler
的引用。我所掌握的唯一(相当蹩脚的)线索是调用main中的AbstractApplicationContext.RegisterSutdownhook()
。JVM启动参数不包含任何与信号处理相关的内容
日志中没有任何内容(调试级别),也没有针对kill-15
打印到stdout的内容
如何找出忽略SIGTERM的原因
正常情况下,信号1(SIGHUP)、2(SIGINT)、4(SIGILL)、7(SIGBUS)、8
JVM线程上的(SIGFPE)、11(SIGSEGV)和15(SIGTERM)会导致JVM崩溃
关闭;因此,应用程序信号处理程序不应
尝试从中恢复,除非不再需要JVM
由于jvm没有退出,您可能需要检查是否存在:
public void registerShutdownHook() {
if (this.shutdownHook == null) {
// No shutdown hook registered yet.
this.shutdownHook = new Thread() {
@Override
public void run() {
doClose();
}
};
Runtime.getRuntime().addShutdownHook(this.shutdownHook);
}
}
唯一的钩子用法是在SpringApplicationContext中。spring关闭过程是否可能阻止jvm关闭?是的,它调用Runtime.addShutdownHook。代码添加。