Необработанный SIGLARM завершает работу Java-приложения - PullRequest
0 голосов
/ 07 марта 2019

Я использую openjdk 1.8u191 на довольно чистых системах Ubuntu 16.04 и 18.04, хосты x86_64.

Я запускаю это простое приложение:

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

Теперь, когда я посылаю сигнал SIGALRM этому java-процессу kill -14 ${PID}, я испытываю его немедленное завершение со следующим выводом:

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

Что меня беспокоит, так это то, что я потратил пару часов, пытаясь найти какую-либо информацию, касающуюся прерывания JIGM SIGALRM, но не нашел ее. У меня вопрос: это ожидаемое поведение или детали, связанные с реализацией, и следующая остановка для меня - исходный код JVM? Потому что я не ожидал, что SIGALRM закроет мои приложения, и теперь я брожу, если есть еще.

1 Ответ

1 голос
/ 07 марта 2019

Если вы посмотрите на справочную страницу для signal(7), вы увидите этот список:

Signal      Standard   Action   Comment
----------------------------------------------------------
SIGALRM      P1990      Term    Timer signal from alarm(2)

Для большинства сигналов по умолчанию действия прекращаются,с дампом ядра или без него.Наиболее распространенный способ обработки сигналов в JVM - это чистое отключение, когда это возможно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...