3

次のようなさまざまな理由で終了できるJavaプログラムがある場合:

  • 「閉じるときに終了」に設定されているメインウィンドウが閉じられたため

  • コードにSystem.exit(0)が含まれているため

  • これ以上ウィンドウがないため(そして、閉じるときに終了するように設定されたものはありません)、まだいくつかのスレッドが実行されているため、ある時点ではデーモンスレッドのみが実行されているため、プログラムは終了します。

そして、シャットダウンフックがインストールされています(これは正常に実行されています)。

シャットダウンフックから、Javaプログラムが終了した原因を知る方法はありますか?

(私はそれが良い考えであるかどうか、またはコードベース全体に広がっていないかどうかを尋ねていないことに注意してくださいSystem.exit(...):これはこの質問が何であるかではありません)

基本的に、考えられるすべてのJVM出口ポイントをインターセプトしてそこに情報を追加する必要があるのか​​、それともそれを可能にするメソッドがすでに存在するのかを知りたいと思います。

4

2 に答える 2

4

システム出口で呼び出されるSecurityManagerを追加できます(許可されているかどうかを判別するため)。これが後で呼び出された場所を保存するか、SecurityManagerで処理できます。

于 2011-11-22T16:38:44.893 に答える
-1

シャットダウン フックは、JVM のシャットダウン時に実行可能なロジックを別のスレッドで実行するだけです。これ以上何もできません。

于 2011-11-22T17:07:14.463 に答える