当以下 Clojure 示例程序被打包到一个独立的 uberjar(通过 boot-clj)中时,执行的java -jar app.jar
行为与从-main
开发 repl 中调用函数不同。
(ns bat-man.core
(:require [clojure.java.shell :refer [sh]])
(:gen-class))
(defn -main [& args]
(prn (sh "echo" "test")))
发生的情况是,结果{:exit 0, :out "test\n", :err ""}
会立即打印到stdout
,但之后需要一段时间,可能是半分钟,直到程序真正退出。
情况并非如此,当程序被修改为只打印一些输出而没有调用时sh
。
在开发repl中,一切都如预期的那样,功能在打印后立即完成。如何解释/解决?
ps aux
更新:这是程序正在花时间完成的同时拍摄的摘录:
unsername 8730 5.4 2.0 3643576 80052 pts/8 Sl+ 13:25 0:01 java -jar /path/to/app.jar