clojure - 使用 "lein run"运行时,关闭 Hook 不会触发

标签 clojure leiningen shutdown-hook clojure-java-interop

我有以下代码:

(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/

相关文章:

clojure - 如何在 Light Table 中设置 Vim 模式?

clojure - 在 clojure 中如何定义 defmacro 本身?

regex - Clojure正则表达式命名组

java - 如何隐藏 TieredCompilation 警告?

testing - 如何在 Leiningen 中声明测试范围依赖项?

macos - 在Mac OS上安装Leiningen时出现问题

Java 关闭 Hook 并写入 Excel 工作表

clojure - 如何在Clojure中嵌套需求?

Java 并发 : Run until terminated

java - 如何正常关闭/终止 java 进程?