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) を受信したときは実行されません。

lein の外で実行された同じコードは、SIGINT を受信した場合でも、シャットダウン フックを正常に実行します。

lein から実行して Ctrl-C で中止するときに、シャットダウン フックを実行するにはどうすればよいですか?

4

1 に答える 1

30

トランポリンで走ってみましたか?

lein trampoline run

私にはうまくいくようです。

AFAIK「leinトランポリン」はJVMをネストしないため、Ctrl-Cはleiningenではなく、コードによってキャッチされます。

于 2012-06-02T16:16:24.807 に答える