我正在kill -15 <PID>
在我的工作jvm,它似乎完全被忽略。
环境是:
项目中没有提及sun.misc.SignalHandler
。 我唯一的(相当蹩脚的)线索是调用AbstractApplicationContext.registerShutdownHook()
在main中。 JVM启动参数不包含与信号处理相关的任何内容。
日志中没有任何东西(DEBUG级别),没有什么打印到标准输出反应kill -15
。
如何找出什么原因会忽略SIGTERM?
通常,JVM线程上的信号1(SIGHUP),2(SIGINT),4(SIGILL),7(SIGBUS),8(SIGFPE),11(SIGSEGV)和15(SIGTERM)会导致JVM关闭; 因此,应用程序信号处理程序不应该尝试从这些中恢复,除非不再需要JVM。
既然你的jvm没有退出,你可能需要检查是否有:
任何使用Runtime.addShutdownHook
JVM启动时存在-Xrs选项
任何使用sun.misc.SignalHandler。
这是Spring源代码中的AbstractApplicationContext.registerShutdownHook()。
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); } }