java - 未处理的 SIGLARM 终止 Java 应用程序

标签 java linux signals

我在相当干净的 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/

相关文章:

c - 在 C 中将字符写入管道

java - 如何使用另一个类中的图形对象调用函数?

Java迁移1.4版本到更高版本

Linux 设备驱动程序原子 GET 然后通过 ioctl SET

linux - OpenLDAP gidnumber 和 uidnumber

c - 如何使用 struct sigaction 和 struct itimerval 一次处理两个信号?

javascript - 如何显示多个用户输入的答案以及如何将其全部写入文本文件

java - 在不修改原始源代码的情况下扩展访客模式?

java - 从 JSON 对象获取数组

python - 终止无限循环的线程应用程序