Jak mogę przechwycić Ctrl + C(co normalnie zabiłoby proces) w aplikacji Java CLI (interfejs wiersza poleceń)?
Czy istnieje rozwiązanie wieloplatformowe (Linux, Solaris, Windows)?
Używam Console
„s readLine()
, ale jeśli jest to konieczne, można użyć innej metody odczytać znaki ze standardowego wejścia.
java
command-line
stdin
command-line-interface
copy-paste
ivan_ivanovich_ivanoff
źródło
źródło
Zakładam, że chcesz zamknąć się z wdziękiem i nie zwierać procesu zamykania. Jeśli moje założenie jest poprawne, powinieneś spojrzeć na Shutdown Hooks .
źródło
Aby móc obsłużyć Ctrl+ Cbez zamykania z jakiegoś powodu, będziesz musiał użyć jakiejś formy obsługi sygnału (ponieważ wejście Ctrl+ Cnie jest w rzeczywistości przekazywane bezpośrednio do twojej aplikacji, ale jest obsługiwane przez system operacyjny, który generuje SIGINT, który jest następnie przekazywany do Javy.
Więcej informacji na temat obsługi sygnałów można znaleźć pod adresem http://www.oracle.com/technetwork/java/javase/signals-139944.html .
(Jeśli chcesz tylko wdzięcznie się zamknąć, wystarczy odpowiedź akf).
źródło
Kilka linków o tym, jak obsłużyć SIGTERM - czyli sygnał, który program dostaje po stronie systemu operacyjnego:
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/
To powinno działać na systemach operacyjnych POSIX - to znaczy, Mac i Unix powinny działać, na Windowsie nie jestem pewien, pamiętam, że słyszałem, że jest również do pewnego stopnia kompatybilny z POSIX, ale może być bardzo varty w różnych wersjach.
źródło