首页 文章

为什么我的clojure启动脚本停止运行

提问于
浏览
0

我想启动一个必须继续运行的clojure启动服务器 . 所以我创建了一个 -main 函数,以便我可以运行 ./build.boot 并执行main函数 . 在main函数中,我启动一个非守护进程线程,只要存在非守护进程线程,JVM就会继续运行 . 但是,启动脚本会停止,我的服务器也会停止 . 我究竟做错了什么?

#!/usr/bin/env boot

(defn -main [& args]
  (let [t (Thread. #(loop []
                      (println (java.util.Date.))
                      (Thread/sleep 500)
                      (recur)))]
    (.setDaemon t false)
    (.start t)
    (Thread/sleep 3000)
    (println "I have started a non-daemon thread, but still I exit???")))

产量

#inst "2016-06-23T08:39:23.453-00:00"
#inst "2016-06-23T08:39:24.005-00:00"
#inst "2016-06-23T08:39:24.507-00:00"
#inst "2016-06-23T08:39:25.009-00:00"
#inst "2016-06-23T08:39:25.511-00:00"
#inst "2016-06-23T08:39:26.013-00:00"
I have started a non-daemon thread, but still I exit???

之后脚本结束 .

1 回答

  • 1

    我想一旦任务完成(他们的函数调用结束),启动调用 System/exit .

    您需要将任务修改为join到您的衍生线程,以便 -main 函数不会完成:

    (.join t)

相关问题