我有一个简单的单线程Clojure程序,它创建一个用于交换数据的临时文件.当程序正常退出时,该文件将被删除,但是当程序通过Ctrl+ C,Ctrl+ D或Ctrl+ 退出时,Z该位代码将永远不会执行.我需要它来执行程序退出的方式.我知道我需要捕捉到这个信号(我以前用其他语言做过),但我似乎无法弄清楚如何在Clojure中做到这一点.
xia*_*owl 29
我不知道Clojure是否为此目的包装了方法.在java中,您可以使用Runtime.addShutdownHook()
注册新的虚拟机关闭挂钩.
Java虚拟机关闭以响应两种事件:
当最后一个非守护程序线程退出或调用退出(等效,System.exit)方法时,程序正常退出,或者
响应于用户中断(例如,键入^ C)或系统范围的事件(例如用户注销或系统关闭),终止虚拟机.
这是一个简单的演示
(.addShutdownHook (Runtime/getRuntime) (Thread. (fn [] (println "Shutting down..."))))
user=> ;; Ctrl-C
Shutting down...
Run Code Online (Sandbox Code Playgroud)