【发布时间】:2013-12-10 02:56:24
【问题描述】:
我有一个顶级的 core.async 循环。我希望它无限期地运行,至少在我用 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,混合模式)
【问题讨论】:
标签: java clojure signals core.async