Как я могу “прервать” Ctrl+C в приложении CLI?

Я стал твердым сторонником того, что я называю Правило Headrick, названное по имени моего коллеги, который обнаружил, что хороший способ заставить кого-то делать что-то состоит в том, чтобы сделать его болезненным для них не , чтобы сделать это.

В Вашем случае, прося, чтобы Ваши некомментирующие разработчики провели час или два объяснения их кода, возможно, "медленной" аудитории, возможно, в течение их обеда, "для предотвращения уменьшения проекта", будет иметь большое значение. Умные люди - даже упрямые - учатся быстро!

80
задан Jasper 22 November 2012 в 09:41
поделиться

4 ответа

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

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

Вам нужно использовать a SignalHandler ( sun.misc.SignalHandler ) для перехвата сигнала SIGINT , инициированного Ctrl + C (как в Unix, так и в Windows).
См. эту статью (pdf, стр. 8 и 9).

117
ответ дан 24 November 2019 в 09:56
поделиться

Я предполагаю, что вы хотите корректно завершить работу, а не замыкать процесс завершения работы. Если мое предположение верно, то вам следует взглянуть на Перехватчики выключения .

16
ответ дан 24 November 2019 в 09:56
поделиться

, чтобы иметь возможность обрабатывать Ctrl + C без при выключении по какой-то причине вам нужно будет использовать некоторую форму обработки сигналов (поскольку ввод Ctrl + C на самом деле не передается напрямую вашему приложению, а вместо этого обрабатывается ОС, которая генерирует SIGINT, который затем передается в Java.

См. http://www.oracle.com/technetwork/java/javase/signals-139944.html для получения подробной информации об обработке сигналов .

(Если вы просто хотите корректно завершить работу, ответа akf будет достаточно.)

8
ответ дан 24 November 2019 в 09:56
поделиться

Несколько ссылок о том, как обрабатывать SIGTERM - это сигнал, который программа получает на Сторона ОС:

http://blog.webinf.info/2008/08/intercepting-sigterm.html

http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/ html / signal.html

http://www.ibm.com/developerworks/java/library/i-signalhandling/

Это должно работать в операционных системах POSIX, то есть Mac и Unix должны работать в Windows Я не уверен, я помню, что слышал, что он также в некоторой степени совместим с POSIX, но может сильно зависеть от разных версий.

4
ответ дан 24 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: