我有以下代码:
(ns test-hook.core) (defn -main [] (.addShutdownHook(Runtime / getRuntime)(Thread。#(printlnshutdown)))(printlnstart) (doseq [i(range 1 6)] (Thread / sleep 1000)(println i)))和以下project.clj
(defproject test- hook1.0.0-SNAPSHOT:aot:all :main test-hook.core :descriptionFIXME:write description:dependencies [[org.clojure / clojure1.2.0]])当我运行lein run钩子仅在正常程序执行时执行,而不是在接收SIGINT(Ctrl-C)
时运行相同的代码,在lein外部成功执行关闭钩子,即使接收到SIGINT 。
如何使用Ctrl-C运行时执行关闭挂接?
lein trampoline run似乎适合我。
AFAIKlein trampoline不嵌套JVM,因此您的Ctrl-C不会被leiningen捕获,而是由您的代码捕获。
I have the following code:
(ns test-hook.core) (defn -main [] (.addShutdownHook (Runtime/getRuntime) (Thread. #(println "shutdown"))) (println "start") (doseq [i (range 1 6)] (Thread/sleep 1000) (println i)))and the following 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"]])when I run it with "lein run" the shutdown hook only gets executed on normal program execution, not when receiving SIGINT (Ctrl-C)
the same code when ran outside of lein successfully executes the shutdown hook even when receiving SIGINT.
how can I have the shutdown hook executed when running from lein and aborting with Ctrl-C?
解决方案Have you tried running it with trampoline?
lein trampoline runSeems to work for me.
AFAIK "lein trampoline" doesn't nest the JVM, so your Ctrl-C isn't caught by leiningen, but by your code.
更多推荐
当使用“lein run”运行时,关闭挂钩不触发。
发布评论