如何捕捉CTRL + C用Clojure?(How to catch CTRL+C in Cloju

2019-07-30 15:55发布

我有一个创建用于交换数据的临时文件的简单单线程的Clojure程序。 当程序退出通常此文件被删除,但是当程序经由Ctrl + C ,Ctrl键 + d,Ctrl + Z的代码,位从不执行退出。 我需要它来执行regardles SOF程序是如何退出。 我知道我需要赶上信号(我以前在其他语言中做到了这一点),但我似乎无法弄清楚如何做到这一点Clojure中。

Answer 1:

我不知道是否已经的Clojure包裹方法达到这个目的。 在Java中,你可以使用Runtime.addShutdownHook()

注册新的虚拟机关闭挂钩。

Java虚拟机关闭响应两种事件:

  • 在程序正常退出,当最后一个非守护线程退出时或者当(等同于System.exit)方法被调用的出口处,或

  • 虚拟机被终止在响应于用户中断,如打字^ C,或一个全系统的事件,如用户注销或系统关闭。

更新

下面是一个简单的演示

(.addShutdownHook (Runtime/getRuntime) (Thread. (fn [] (println "Shutting down..."))))

user=> ;; Ctrl-C
Shutting down...


Answer 2:

看一看在deleteOnExit在java.io.File中的方法:

(import '(java.io File))
(doto (File/createTempFile "foo" nil nil) (.deleteOnExit))


文章来源: How to catch CTRL+C in Clojure?