Ich habe eine Top-Level-core.async Go-Schleife. Ich möchte, dass es unbegrenzt läuft, zumindest bis ich es signalisiere, mit CTRL-C oder kill oder ähnlichem zu stoppen. Ich bin derzeit mit java.lang.Runtime/addShutdownHook wie folgt aus:Verlassen Sie eine Clojure core.async go Schleife auf Kill
(ns async-demo.core
(:require [clojure.core.async :as async
:refer [<! >! <!! timeout chan alt! go]]))
(defn run [] (go (loop [] (recur))))
(.addShutdownHook (Runtime/getRuntime) (Thread. #(println "SHUTDOWN")))
Hier meine Probleme sind:
Wenn ich die REPL starten und
(run)
dann startet und läuft in einem Hintergrundthread. Wenn ich die REPL verlasse, sehe ich nicht die gewünschte Nachricht zum Herunterfahren.Wenn ich jedoch von
lein run
starte, wird die go-Schleife sofort beendet und "SHUTDOWN" angezeigt.
Weder ist was ich will.
Ich erwarte nicht unbedingt eine Lösung, die für alle JVM funktioniert. Ich entwickle auf einem Mac und bereitstellen zu Ubuntu, so möchte ich eine Lösung zu finden, die für beide Werke:
Mac JVM: java version "1.7.0_45" Java (TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot (TM) 64-Bit-Server-VM (Build 24.45-b08, gemischter Modus)
Ubuntu JVM: Java-Version "1.7.0_25" OpenJDK-Laufzeitumgebung (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2) OpenJDK 64-Bit-Server VM (build 23,7-B01, mixed mode)
Siehe auch: http://stackoverflow.com/questions/11709639/how-to-catch-ctrlc-in-clojure –
Siehe auch: http://stackoverflow.com/questions/18612063/clojure- core-async-cpu-hängt-nach-timeout –