2009-08-04 118 views
7

ロックファイルを作成するJavaプログラムを使用して、他の実行が同時に実行されないようにします。プログラムが実行されると、ファイルが作成され、正常終了または例外終了時にファイルが削除されます。しかし、ユーザーがCtrl + Cキーを押す、端末を閉じる、または何らかの方法で実行を中断すると、ファイルは削除されません。この割り込みコマンドを検出し、この場合もファイルが削除されるようにする方法はありますか?JavaでCtrl + Cのようなシステム割り込みを処理する方法

+0

皮肉なことに、私はこの質問を忘れてしまい、後に関連する6年(関連する現実世界の経験)を忘れてしまいました(https://stackoverflow.com/a/34188676/113632)。 @Amberは、ほとんどのJavaアプリケーションがシャットダウンフックを使用する必要がありますが、リンクされた質問で議論されているように、 'sun.misc.Signal'を使うのに必要な' SIGINT'やその他のシグナルを実際に*扱うことは絶対に正しいです。 – dimo414

答えて

5

shutdown hooksを調べるとよいでしょう。

また、これはおそらく、重複またはほぼ重複して一日か二日前から、この前のSOの質問です:これに対処するための唯一の良い方法は、あなたのログファイルにタイムスタンプすることである

How can I "intercept" Ctrl+C in a CLI application?

+0

シャットダウンフックは、JVMが異常終了した場合でも実行されますか?私はそれを疑うだろう。 –

+0

@ mmyers、あなたの異常の定義に依存します。 :) Ctrl + Cは一般的にそれらを起動します。端末を閉じるのは一般的ではありません。 – jsight

+1

このようなロックファイルを完全に削除する方法はありません。それらをタイムスタンプすることは助けになるかもしれませんが、数秒ごとにそのディスクを書き込む必要があります。多くのプログラムでは、起動時にロックファイルを検索し、そのことについてユーザにプロンプ​​トを表示します。 – Amber

2

、数秒ごとに新しいタイムスタンプでログファイルを更新します。 File.deleteOnExitが助けになりますが、誰もが電源コードを引っ張ってしまうとどうなりますか?

タイムスタンプを書き込んだ場合、有効なタイムスタンプ(最近書き込まれたもの)があるかどうかをチェックし、タイムスタンプが古すぎる場合はログファイルを上書きできます。そうすれば、失効したロックファイルはユーザーの道には入りません。

関連する問題