我有以下代码:
(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中止时执行关闭挂钩?
答案 0 :(得分:24)
你试过用蹦床运行吗?
lein trampoline run
似乎适合我。
AFAIK“lein trampoline”没有嵌套JVM,因此你的Ctrl-C不会被leiningen捕获,而是被你的代码捕获。