2016-06-23 3 views
0

계속 실행해야하는 클로저 부팅으로 서버를 시작하고 싶습니다. 그래서 나는 ./build.boot을 실행할 수 있도록 함수 -main을 만들었고 main 함수를 실행할 것입니다. main 함수에서 비 데몬 (non-daemon) 쓰래드가있는 한 JVM이 계속 실행한다는 생각으로 비 데몬 쓰레드를 시작합니다. 그러나 부팅 스크립트가 중지되고 내 서버도 중지됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?내 clojure 부트 스크립트가 실행을 멈추는 이유

#!/usr/bin/env boot 

(defn -main [& args] 
    (let [t (Thread. #(loop [] 
         (println (java.util.Date.)) 
         (Thread/sleep 500) 
         (recur)))] 
    (.setDaemon t false) 
    (.start t) 
    (Thread/sleep 3000) 
    (println "I have started a non-daemon thread, but still I exit???"))) 

스크립트가 종료 된 후 출력

#inst "2016-06-23T08:39:23.453-00:00" 
#inst "2016-06-23T08:39:24.005-00:00" 
#inst "2016-06-23T08:39:24.507-00:00" 
#inst "2016-06-23T08:39:25.009-00:00" 
#inst "2016-06-23T08:39:25.511-00:00" 
#inst "2016-06-23T08:39:26.013-00:00" 
I have started a non-daemon thread, but still I exit??? 

.

+0

수락한다 : 당신의 산란 스레드가 완료되지 때까지

당신은 -main 기능이 완료되지 않습니다 귀하의 양산 스레드에 join에 작업을 수정해야 그것. – nha

답변

1

일단 작업이 완료되면 (해당 기능 호출이 종료되면) 부팅시 System/exit이 호출됩니다. 대답은 문제가 해결되면

(.join t)

+0

'(.join t)'여야합니다, thanks – zetafish

+0

예, 죄송합니다. 나는 그것을 고쳤다. –