Java 为什么';t爪哇';在BeagleBone Black上添加Ctrl-C的关闭钩子工作?有解决办法吗? 问题

Java 为什么';t爪哇';在BeagleBone Black上添加Ctrl-C的关闭钩子工作?有解决办法吗? 问题,java,ubuntu,clojure,beagleboneblack,shutdown-hook,Java,Ubuntu,Clojure,Beagleboneblack,Shutdown Hook,我已经在我的Ubuntu开发机器和BeagleBone Black上运行了以下Clojure代码,可以确认它在前者上有效,但在后者上无效 (defn setup-shutdown-hook! [f] (.addShutdownHook (Runtime/getRuntime) (Thread. f))) (setup-shutdow

我已经在我的Ubuntu开发机器和BeagleBone Black上运行了以下Clojure代码,可以确认它在前者上有效,但在后者上无效

(defn setup-shutdown-hook!                           
  [f]                                                  
  (.addShutdownHook (Runtime/getRuntime) (Thread. f))) 

(setup-shutdown-hook!
  (fn []
    (println "I am no more")))

(defn -main []
  (doseq [i (range)]
    (Thread/sleep 1000)
    (println "Staying alive")))
在BBB上,shutdown钩子在“自然”关机的情况下确实可以正常工作,但在Ctrl-C上不行。在Ubuntu机器上,它似乎总是能正常工作

对这种不同的行为有什么解释吗?Java版本?系统级差异?是否有一个解决方法来获得所需的行为

系统详细信息 Ubuntu:

java version "1.7.0_65"
OpenJDK Runtime Environment (IcedTea 2.5.2) (7u65-2.5.2-3~14.04)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
Beaglebone(运行Angstrom;通过SSH连接):


p.S.对于那些熟悉Java但不熟悉Clojure的人来说,上面的Clojure代码只是通过互操作与Java方法挂钩。希望你能测试一下trans

哦,亲爱的。。。这里没有什么神秘之处。我很懒,有点作弊,用
leinexec
在我的Ubuntu机器上运行,而不是
leinrun
(就像我在BBB上做的那样)。很明显,事情的表现似乎不同

关于如何获得所需的行为,lein trampoline run-m起到了关键作用。问题似乎在于,由于使用
lein run
可以在嵌套的JVM中有效地运行应用程序,因此leiningen进程将捕获Ctrl-C而不是应用程序代码。使用
lein trampoline
分离应用程序代码JVM,以便它捕获Ctrl-C,并根据需要运行关闭代码


感谢您为我展示了光明,感谢Stack overflow提出了精彩的“相关”问题。

缺少信息:您在bbb上运行的是什么发行版(包括版本)?为了运行您的程序,您如何连接到它;谢谢你的提问。我通过SSH连接,并通过leiningen运行。
> java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) Client VM (build 24.60-b09, mixed mode)
> uname -a
Linux beaglebone 3.8.13 #1 SMP Wed Sep 4 09:09:32 CEST 2013 armv7l GNU/Linux