当以下Clojure示例程序打包到一个独立的uberjar中(通过boot-clj)时,java -jar app.jar的执行与从开发repl中调用-main函数不同。
(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的输出时,情况就不是这样了。
在开发计划中,一切都如预期的那样,功能在打印后立即完成。那是怎么解释的?
更新:这是一个摘录自ps aux的同时,该程序正在花时间完成:
unsername 8730 5.4 2.0 3643576 80052 pts/8 Sl+ 13:25 0:01 java -jar /path/to/app.jar发布于 2016-08-18 13:06:28
clojure.java.shell/sh在后台使用future,因此需要调用(shutdown-agents)来关闭后台线程。
https://stackoverflow.com/questions/39016950
复制相似问题