Я начал исследовать проблему, связанную с тем, что происходит, когда пользователь нажимает 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»? Или мне вообще стоит изучить другой механизм?