19

我有以下代码:

(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) 时执行

即使在接收到 SIGINT 时,在 lein 之外运行的相同代码也会成功执行关闭挂钩。

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

4

1 回答 1

30

你试过用蹦床跑吗?

lein trampoline run

似乎对我有用。

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

于 2012-06-02T16:16:24.807 回答