/ / Wie bekomme ich CTRL + C in Clojure? - clojure, Signale

Wie bekomme ich CTRL + C in Clojure? - clojure, Signale

Ich habe ein einfaches Clojure-Programm mit einzelnen Threads, das eine temporäre Datei zum Austauschen von Daten erstellt. Wenn das Programm normal beendet wird, wird diese Datei jedoch gelöscht, wenn das Programm über beendet wird Strg+C, Strg+D, oder Strg+Z Dieses Bit Code wird nie ausgeführt. Ich brauche es, um das Programm zu beenden. Ich weiß, dass ich dieses Signal fangen muss (ich habe das schon früher in anderen Sprachen gemacht), aber ich kann anscheinend nicht herausfinden, wie es in Clojure geht.

Antworten:

28 für die Antwort № 1

Ich weiß nicht, ob Clojure die Methode zu diesem Zweck eingepackt hat. In Java können Sie verwenden Runtime.addShutdownHook ()

Registriert einen neuen Virtual Machine-Shutdown-Hook.

Die Java Virtual Machine wird als Reaktion auf zwei Arten von Ereignissen heruntergefahren:

  • Das Programm wird normalerweise beendet, wenn der letzte Nicht-Daemon-Thread beendet wird oder wenn die Methode exit (äquivalent System.exit) aufgerufen wird oder

  • Die virtuelle Maschine wird als Reaktion auf einen Benutzer-Interrupt beendet, z. B. durch Eingabe von ^ C oder durch ein systemweites Ereignis, z. B. durch Benutzerabmeldung oder Herunterfahren des Systems.

Aktualisieren

Hier ist eine einfache Demo

(.addShutdownHook (Runtime/getRuntime) (Thread. (fn [] (println "Shutting down..."))))

user=> ;; Ctrl-C
Shutting down...

1 für die Antwort № 2

Sieh dir die. An deleteOnExit Methode in der java.io.File:

(import "(java.io File))
(doto (File/createTempFile "foo" nil nil) (.deleteOnExit))