我在相当干净的 Ubuntu 16.04 和 18.04 系统、x86_64 主机上运行 openjdk 1.8u191。
我运行这个简单的应用程序:
package net.iponweb;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) throws InterruptedException {
while(true) {
System.out.println(ZonedDateTime.now());
Thread.sleep(1000);
}
}
}
使用此命令行:
java -jar sigalrm-1.0-SNAPSHOT.jar
现在,当我通过 kill -14 ${PID}
向这个 java 进程发送一个 SIGALRM 信号时,我遇到它立即终止并输出以下内容:
2019-03-07T18:36:13.150+03:00[Europe/Moscow]
2019-03-07T18:36:14.151+03:00[Europe/Moscow]
2019-03-07T18:36:15.152+03:00[Europe/Moscow]
Alarm clock
令我困扰的是,我花了几个小时试图找到有关 SIGALRM 终止 JVM 的任何信息,但没有找到任何信息。我的问题是,它是预期的行为还是特定于实现的细节,对我来说下一站是 JVM 源代码?因为我不希望 SIGALRM 终止我的应用程序,现在我正在徘徊是否还有更多。
最佳答案
如果你看一下the man page for signal(7)
,您会看到此列表:
Signal Standard Action Comment
----------------------------------------------------------
SIGALRM P1990 Term Timer signal from alarm(2)
大多数信号的默认操作是终止进程,有或没有核心转储。 JVM 中处理信号的最常见方式 is to shut down cleanly when possible .
关于java - 未处理的 SIGLARM 终止 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047794/