Я стал твердым сторонником того, что я называю Правило Headrick, названное по имени моего коллеги, который обнаружил, что хороший способ заставить кого-то делать что-то состоит в том, чтобы сделать его болезненным для них не , чтобы сделать это.
В Вашем случае, прося, чтобы Ваши некомментирующие разработчики провели час или два объяснения их кода, возможно, "медленной" аудитории, возможно, в течение их обеда, "для предотвращения уменьшения проекта", будет иметь большое значение. Умные люди - даже упрямые - учатся быстро!
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).
Я предполагаю, что вы хотите корректно завершить работу, а не замыкать процесс завершения работы. Если мое предположение верно, то вам следует взглянуть на Перехватчики выключения .
, чтобы иметь возможность обрабатывать 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 / signal.html
http://www.ibm.com/developerworks/java/library/i-signalhandling/
Это должно работать в операционных системах POSIX, то есть Mac и Unix должны работать в Windows Я не уверен, я помню, что слышал, что он также в некоторой степени совместим с POSIX, но может сильно зависеть от разных версий.