如何在Clojure中捕获CTRL + C?

Jac*_*and 16 signals clojure

我有一个简单的单线程Clojure程序,它创建一个用于交换数据的临时文件.当程序正常退出时,该文件将被删除,但是当程序通过Ctrl+ C,Ctrl+ DCtrl+ 退出时,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)