Как я могу перехватить Ctrl + C(который обычно убивает процесс) в Java-приложении CLI (интерфейс командной строки)?
Существует ли мультиплатформенное решение (Linux, Solaris, Windows)?
Я использую Console
«S readLine()
, но при необходимости, я мог бы использовать какой - то другой способ , чтобы читать символы из стандартного ввода.
java
command-line
stdin
command-line-interface
copy-paste
ivan_ivanovich_ivanoff
источник
источник
Я предполагаю, что вы хотите корректно завершить работу и не прерывать процесс завершения работы. Если мое предположение верно, то вам следует посмотреть на крючки выключения .
источник
Чтобы иметь возможность обрабатывать Ctrl+ Cбез выключения по какой-либо причине, вам необходимо использовать некоторую форму обработки сигналов (поскольку вход Ctrl+ Cфактически не передается непосредственно вашему приложению, а вместо этого обрабатывается ОС, которая генерирует SIGINT, который затем передается в Java.
См. Http://www.oracle.com/technetwork/java/javase/signals-139944.html для получения подробной информации об обработке сигналов.
(Если вы просто хотите корректно завершить работу, ответа akf будет достаточно.)
источник
Некоторые ссылки о том, как обрабатывать SIGTERM - это сигнал, который программа получает на стороне ОС:
http://blog.webinf.info/2008/08/intercepting-sigterm.html
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html
http://www.ibm.com/developerworks/java/library/i-signalhandling/
Это должно работать в операционных системах POSIX - то есть Mac и Unix должны работать, в Windows я не уверен, я помню, как слышал, что он также в некоторой степени совместим с POSIX, но может сильно зависеть от разных версий.
источник