5

ユーザーがコマンド ラインからプログラムを起動し、プロセスを強制終了すると (ctrl+c など)、プログラムがすべての接続を閉じて正常にシャットダウンするようにしたいのです。これは可能ですか?GUIのように閉じるときにメソッドを呼び出すことはできませんか? このプログラムには GUI がありません。

私にお知らせください。

4

1 に答える 1

8

これは、Java でのシグナル処理に関する非常に優れたガイドです。Ctrl-C を含むシャットダウンと終了のケースもカバーしています。

必要な特定の呼び出しは、ランタイムのaddShutdownHookです。

対処できない特定のケースがまだあります...通常 OSがアプリケーション自体を保存する機会を与えずに、アプリケーションを完全に強制終了する方法があります。このメカニズムですべてのケースをカバーすることはできません。JavaDoc を引用するには

まれに、仮想マシンが異常終了する場合があります。つまり、正常にシャットダウンせずに実行が停止する場合があります。これは、たとえば、Unix の SIGKILL シグナルまたは Microsoft Windows の TerminateProcess 呼び出しで、仮想マシンが外部で終了したときに発生します。たとえば、内部データ構造が破損したり、存在しないメモリにアクセスしようとしたりして、ネイティブ メソッドが失敗した場合にも、仮想マシンは中止される可能性があります。仮想マシンが異常終了した場合、シャットダウン フックが実行されるかどうかは保証されません。

于 2009-07-16T04:43:06.927 に答える