90

JavaコマンドラインアプリケーションでCtrl+シグナルをキャッチすることは可能ですか? Cプログラムを終了する前に、いくつかのリソースをクリーンアップしたいと思います。

4

3 に答える 3

94

VM がシャットダウンするたびに実行されるシャットダウン フックを VM にアタッチできます。

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

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

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

ただし、シャットダウン フックとして渡すスレッドはいくつかの規則に従う必要があるため、リンクされたドキュメントを注意深く読んで問題を回避してください。これには、スレッドセーフの確保、スレッドの迅速な終了などが含まれます。

また、コメンターの Jesper が指摘しているように、シャットダウン フックは VM の通常のシャットダウン時に実行されることが保証されていますが、VM プロセスが強制的に終了された場合は実行されません。これは、ネイティブ コードが失敗した場合、またはプロセスを強制終了した場合 ( kill -9taskkill /f) に発生する可能性があります。

しかし、これらのシナリオでは、とにかくすべての賭けがオフになっているので、あまり考えることはありません.

于 2009-10-23T07:52:57.587 に答える