Ловить Ctrl+C в Java



можно ли поймать Ctrl+C сигнал в приложении командной строки java? Я хотел бы очистить некоторые ресурсы перед завершением программы.

691   2  

2 ответов:

Вы можете прикрепить shutdown hook к виртуальной машине, которая запускается всякий раз, когда виртуальная машина выключается:

виртуальная машина Java завершает работу в ответ на два вида событий:

  • программа завершает работу нормально, когда завершается последний поток без демона или когда завершается выход (эквивалентно, System.exit) вызывается метод, или

  • виртуальная машина завершается в ответ на прерывание пользователя, например как набрав Ctrl+C, или общесистемное событие, такое как выход пользователя из системы или завершение работы системы.

поток, который вы передаете как shutdown hook, должен следовать нескольким правилам, поэтому внимательно прочитайте связанную документацию, чтобы избежать каких-либо проблем. Это включает в себя обеспечение безопасности потоков, быстрое прекращение потока и т. д.

кроме того, как указывает комментатор Йеспер, крючки выключения гарантированно работают в обычном режиме завершение работы виртуальной машины, но если процесс ВМ прекращается в принудительном порядке, они не. Это может произойти, если машинный код напортачит или если вы принудительно убить процесс (kill -9,taskkill /f).

но в этих сценариях все ставки в любом случае выключены, поэтому я бы не стал тратить слишком много времени на это.

только для быстрого тестирования консоли...

Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
            try {
                Thread.sleep(200);
                System.out.println("Shouting down ...");
                //some cleaning up code...

            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

Comments

    Ничего не найдено.