17

データを交換するための一時ファイルを作成する単純なシングルスレッドのClojureプログラムがあります。プログラムが正常に終了すると、このファイルは削除されますが、プログラムがCtrl+ CCtrl+ D、またはCtrl+を介して終了すると、Zそのコードは実行されません。プログラムの終了方法を実行するために必要です。私はそのシグナルをキャッチする必要があることを知っています(私は以前に他の言語でこれを実行しました)が、Clojureでそれを実行する方法を理解できないようです。

4

2 に答える 2

31

Clojure がその目的のためにメソッドをラップしているかどうかはわかりません。Java では、 Runtime.addShutdownHook()を使用できます。

新しい仮想マシンのシャットダウン フックを登録します。

Java 仮想マシンは、次の 2 種類のイベントに応答してシャットダウンします。

  • 最後の非デーモン スレッドが終了するか、exit (同等の System.exit) メソッドが呼び出されると、プログラムは正常に終了します。

  • 仮想マシンは、^C の入力などのユーザー割り込み、またはユーザー ログオフやシステム シャットダウンなどのシステム全体のイベントに応答して終了します。

アップデート

ここに簡単なデモがあります

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

user=> ;; Ctrl-C
Shutting down...
于 2012-07-29T13:59:11.473 に答える
1

java.io.File のdeleteOnExitメソッドを見てください。

(import '(java.io File))
(doto (File/createTempFile "foo" nil nil) (.deleteOnExit))
于 2012-07-29T22:01:12.607 に答える