トップレベルのcore.async go ループがあります。少なくともCTRL-Cまたはkillなどで停止するように通知するまで、無期限に実行したい. 現在、次のようにjava.lang.Runtime/addShutdownHookを使用しています。
(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")))
ここに私の問題があります:
REPL を開始する
(run)
と、バックグラウンド スレッドで開始および実行されます。REPL を終了すると、目的のシャットダウン メッセージが表示されません。ただし、から実行する
lein run
と、go ループがすぐに終了し、「SHUTDOWN」と表示されます。
どちらも私が欲しいものではありません。
すべての JVM で機能するソリューションが見つかるとは限りません。私は Mac で開発し、Ubuntu にデプロイするので、両方で機能するソリューションを見つけたいと思います。
Mac JVM: Java バージョン "1.7.0_45" Java(TM) SE ランタイム環境 (ビルド 1.7.0_45-b18) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 24.45-b08、混合モード)
Ubuntu JVM: Java バージョン "1.7.0_25" OpenJDK ランタイム環境 (IcedTea 2.3.10) (7u25-2.3.10-1ubuntu0.12.04.2) OpenJDK 64 ビット サーバー VM (ビルド 23.7-b01、混合モード)