1
次のClojureサンプルプログラムを(boot-cljを使用して)スタンドアロンuberjarにパックすると、java -jar app.jar
の実行は、開発repl内から-main
関数を呼び出すのとは異なる動作をします。何が起こるuberjar内からのspwaningプロセスの問題
(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
このソリューションは機能しますか? IIRC先物とエージェントは異なるスレッドプールを使用します。 – OlegTheCat
同じ動作が続くと思われます。シャットダウンエージェントのドキュメントから役立つかもしれません。「実行中のアクションは完了しますが、新しいアクションは受け入れられません。」 –
@OlegTheCatはい、これはうまくいくはずです。この回答を見る:http://stackoverflow.com/questions/3393497/future-promises-in-clojure-hangs-on-me –