Wie kann ich Strg+C in einer CLI-Anwendung „abfangen“?
Lesezeit: 2 Minuten
ivan_ivanovich_ivanoff
Wie kann ich abfangenStrg+C (was normalerweise den Prozess beenden würde) in einer CLI-Java-Anwendung (Befehlszeilenschnittstelle)?
Gibt es eine Multi-Plattform-Lösung (Linux, Solaris, Windows)?
Ich benutze Console‘S readLine()aber bei Bedarf könnte ich eine andere Methode verwenden, um Zeichen aus der Standardeingabe zu lesen.
VonC
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
Dies sollte in der Lage sein, das Signal abzufangen, aber nur als Zwischenschritt, bevor sich die JVM vollständig selbst herunterfährt, also ist es möglicherweise nicht das, wonach Sie suchen.
Sie müssen eine verwenden SignalHandler (sun.misc.SignalHandler) um die abzufangen SIGINT Signal ausgelöst durch a Strg+C (sowohl unter Unix als auch unter Windows).
Sehen Dieser Beitrag (pdf, Seite 8 und 9).
@MartijnCourteaux Das passiert nach fünf Jahren 😉 Ich habe eine ähnliche Quelle zu diesem Thema gefunden und den Link entsprechend geändert.
– VonC
11. April 14 um 14:06 Uhr
@VonC – Es ist wieder tot
– Gurwinder Singh
3. Dezember 17 um 12:27 Uhr
@GurV Welcher Link? Die Änderung, die ich im April 2014 vorgenommen habe (stackoverflow.com/revisions/…), ist immer noch gültig: Sie können die PDF-Datei immer noch herunterladen.
– VonC
3. Dezember 17 um 13:24 Uhr
Ich gehe davon aus, dass Sie ordnungsgemäß herunterfahren und den Herunterfahrvorgang nicht kurzschließen möchten. Wenn meine Vermutung richtig ist, dann sollte man sich das anschauen Shutdown-Hooks.
Noch nie was von Shutdown Hooks gehört. Danke schön!
– ivan_ivanovich_ivanoff
1. Aug. 09 um 8:40
Bernstein
Um umgehen zu können Strg+C ohne aus irgendeinem Grund herunterzufahren, müssen Sie eine Form der Signalbehandlung verwenden (da die Strg+C Die Eingabe wird nicht direkt an Ihre Anwendung übergeben, sondern vom Betriebssystem verarbeitet, das ein SIGINT generiert, das dann an Java übergeben wird.
Das sollte auf POSIX-Betriebssystemen funktionieren – das heißt, Mac und Unix sollten funktionieren, unter Windows bin ich mir nicht sicher, ich erinnere mich, dass es bis zu einem gewissen Grad auch POSIX-kompatibel ist, aber mit verschiedenen Versionen stark variieren kann.
.
7609100cookie-checkWie kann ich Strg+C in einer CLI-Anwendung „abfangen“?yes