使用“lein run”运行时,shutdown hook不会触发

时间:2012-06-01 18:31:07

标签: clojure leiningen shutdown-hook clojure-java-interop

我有以下代码:

(ns test-hook.core)

(defn -main []
  (.addShutdownHook (Runtime/getRuntime) (Thread. #(println "shutdown")))
  (println "start")
  (doseq [i (range 1 6)]
    (Thread/sleep 1000)
    (println i)))

以及以下project.clj

(defproject test-hook "1.0.0-SNAPSHOT"
  :aot :all
  :main test-hook.core
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.2.0"]])

当我使用“lein run”运行它时,关闭钩子仅在正常程序执行时执行,而不是在接收SIGINT(Ctrl-C)时执行

在lein外部运行时,相同的代码即使在接收到SIGINT时也会成功执行shutdown hook。

如何从lein运行并使用Ctrl-C中止时执行关闭挂钩?

1 个答案:

答案 0 :(得分:24)

你试过用蹦床运行吗?

lein trampoline run

似乎适合我。

AFAIK“lein trampoline”没有嵌套JVM,因此你的Ctrl-C不会被leiningen捕获,而是被你的代码捕获。