Wie kann ich „abfangen“ Strg + C in einer CLI-Anwendung?
-
06-07-2019 - |
Frage
Wie kann ich abfangen Strg + C (was normalerweise würde den Prozess töten) in einem CLI (Command Line Interface) Java-Anwendung?
Gibt es eine Multi-Plattform-Lösung existiert (Linux, Solaris, Windows)?
Ich verwende Console
des readLine()
, aber wenn nötig, könnte ich eine andere Methode verwenden
Zeichen von der Standardeingabe zu lesen.
Lösung
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
Das sollte das Signal abfangen, sondern nur als Zwischenschritt vor der JVM vollständig Abschaltungen selbst in der Lage sein, so kann es nicht sein, was Sie suchen nach.
Sie benötigen ein verwenden SignalHandler
(sun.misc.SignalHandler
) das SIGINT
Signal durch ein ausgelöst abzufangen Strg + C (unter Unix sowie unter Windows).
Siehe diesem Artikel (pdf, Seite 8 und 9).
Andere Tipps
Ich gehe davon aus Sie zum Herunterfahren wollen anmutig und Kurzschluss den Shutdown-Prozess nicht. Wenn meine Annahme richtig ist, dann sollte man sich Shutdown Hooks .
Um in der Lage zu handhaben Strg + C ohne aus irgendeinem Grund herunterzufahren, werden Sie irgendeine Form von Signal verwenden müssen Handhabung (da die Strg + C Eingang ist eigentlich nicht direkt an Ihre Anwendung übergeben, sondern durch das Betriebssystem behandelt wird, die eine SIGINT erzeugt, die dann an Java übergeben wird.
Siehe http://www.oracle.com/technetwork/ java / JavaSE / signals-139944.html Details zu Signalverarbeitung.
(Wenn Sie wollen einfach nur anmutig shutdown, akf Antwort genügt.)
Einige Links wie SIGTERM zu handhaben - das ist das Signal des Programm auf der OS-Seite bekommen:
http://blog.webinf.info/2008/08/intercepting -sigterm.html
http: //java.sun .com / JavaSE / 6 / webnotes / Probleme / TSG-VM / html / signals.html
http://www.ibm.com/developerworks/java/ Bibliothek / i-signalhandling /
Das sollte auf POSIX-Betriebssystemen arbeiten - das heißt, Mac und Unix sollten auf Windows arbeiten, ich bin mir nicht sicher, ich erinnere mich, es auch zu einem gewissen Grad kompatibel POSIX ist, könnte aber Varty viel mit verschiedenen Versionen <. / p>