当使用“lein run”运行时,关闭挂钩不触发。 [英] shutdown hook doesn't fire when running with "lein run"
问题描述
我有以下代码:
(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 run
Seems 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”运行时,关闭挂钩不触发。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!