Wie kann ich Strg+C in einer CLI-Anwendung „abfangen“?

Lesezeit: 2 Minuten

Wie kann ich StrgC in einer CLI Anwendung „abfangen
ivan_ivanovich_ivanoff

Wie kann ich abfangen Strg+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.

Wie kann ich StrgC in einer CLI Anwendung „abfangen
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

Wie kann ich StrgC in einer CLI Anwendung „abfangen
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.

Sehen http://www.oracle.com/technetwork/java/javase/signals-139944.html für Details zur Signalverarbeitung.

(Wenn Sie nur ordnungsgemäß herunterfahren möchten, reicht die Antwort von akf aus.)

Einige Links zum Umgang mit SIGTERM – das ist das Signal, das das Programm auf der Betriebssystemseite erhält:

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/

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.

.

760910cookie-checkWie kann ich Strg+C in einer CLI-Anwendung „abfangen“?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy