gpt4 book ai didi

java - 从 uberjar 中生成进程的问题

转载 作者:行者123 更新时间:2023-11-29 04:41:36 24 4
gpt4 key购买 nike

当以下 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 时。

在 development repl 中,一切都符合预期,功能在打印后立即完成。如何解释/修复?

更新:这是程序正在花时间完成时截取自 ps aux 的摘录:

unsername         8730  5.4  2.0 3643576 80052 pts/8   Sl+  13:25   0:01 java -jar /path/to/app.jar

最佳答案

clojure.java.shell/sh 在后台使用了一个future,所以你需要调用(shutdown-agents) 来关闭后台线程。

关于java - 从 uberjar 中生成进程的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com