Игнорировать SIGINT в Java - PullRequest
2 голосов
/ 15 июля 2010

Я использую оболочку Java для собственной общей библиотеки в Unix ( JRI ). Собственная библиотека (реализация REPL для R на основе C) внутренне обрабатывает SIGINT. При использовании оболочки Java приложение Java завершает работу, когда я отправляю SIGINT процессу, используя:

kill -SIGINT pid

Я бы предпочел, чтобы SIGINT полностью обрабатывался встроенной библиотекой.

Есть ли простой способ заставить Java полностью игнорировать SIGINT, но при этом иметь нативную библиотеку, получающую его?

Дополнение:

Желательно, чтобы это работало в Unix и OSX.

1 Ответ

7 голосов
/ 15 июля 2010

Стандартного API для него нет, но если вы используете Sun JDK, вы можете использовать sun.misc.Signal и sun.misc.SignalHandler. Пример из документов:

SignalHandler handler = new SignalHandler () {
    public void handle(Signal sig) {
        ... // handle SIGINT
    }
};
Signal.handle(new Signal("INT"), handler);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...