Предполагается, что SIGINT / CTRL_C_EVENT запускает Java хуков выключения под Windows? - PullRequest
0 голосов
/ 10 июля 2020

Я начал исследовать проблему, связанную с тем, что происходит, когда пользователь нажимает Ctrl + C, когда программа Java работает на Windows, и пришел к выводу, что мне нужен отпуск.

В таблице событий консоли для OpenJDK явно упоминается, что SIGTERM включает перехватчики выключения, и все, что я читал и пробовал, подтверждает, что простой Unix kill или что-то подобное Windows , вызовет запуск всех потоков, зарегистрированных Runtime.addShutdownHook(). Это не проблема.

Очевидно, что любое ненормальное внешнее завершение, например SIGKILL, не запускает перехватчики выключения, и не должно. Вмешательство в SIGKILL - не наша цель; Я упоминаю это только для полноты.

Но SIGINT на Unix и CTRL_C_EVENT на Windows, от нажатия Ctrl + C в командной строке работающего терминала не запускает никаких обработчиков выключения; процесс сразу умирает. В «таблице 7-2» на той же связанной странице упоминаются перехватчики выключения для SIGINT (пока опция -Xrs не была предоставлена ​​программе запуска), но эта таблица предназначена только для не- Windows операционных систем. Таблица предназначена для Java 10, но попытка найти эквивалентные страницы для других версий на сайте Oracle привела к тому, что я рано начал пить.

Остальная часть страницы имеет раздел о MS- Windows, но только для стороны C ++, и это программное обеспечение в настоящее время не использует какой-либо код JNI для попытки подключиться к загруженным библиотекам.

Это просто «не может быть обнаружено в Windows» сценарий? Или, скорее, «не может быть обнаружен под Windows без участия JNI»? Или мне вообще стоит изучить другой механизм?

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