我有以下代码:
(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”运行它时,关闭 Hook 仅在正常程序执行时执行,而不是在接收 SIGINT (Ctrl-C) 时执行
即使在接收到 SIGINT 时,在 lein 之外运行的相同代码也会成功执行关闭 Hook 。
从 lein 运行并使用 Ctrl-C 中止时,如何执行关闭 Hook ?
最佳答案
你试过用蹦床跑吗?
lein trampoline run
似乎对我有用。
AFAIK“lein trampoline”不会嵌套 JVM,因此您的 Ctrl-C 不会被 leiningen 捕获,而是被您的代码捕获。
关于clojure - 使用 "lein run"运行时,关闭 Hook 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855559/