2

私はkill -15 <PID>自分の作業中のjvmでやっていますが、完全に無視されているようです。

環境は次のとおりです。

  • Linux 2.6 カーネル
  • JDK 1.6.0_20-x86-64

sun.misc.SignalHandlerプロジェクトには参照がありません。私が持っている唯一の(かなり不自由な)手がかりはAbstractApplicationContext.registerShutdownHook()、 main への呼び出しです。JVM 起動引数には、シグナル処理に関連するものは何も含まれていません。

ログ (DEBUG レベル) には何もありませんkill -15

SIGTERM を無視する原因を特定するにはどうすればよいですか?

4

1 に答える 1

2

通常、JVM スレッド上のシグナル 1 (SIGHUP)、2 (SIGINT)、4 (SIGILL)、7 (SIGBUS)、8 (SIGFPE)、11 (SIGSEGV)、および 15 (SIGTERM) によって JVM がシャットダウンされます。したがって、アプリケーション シグナル ハンドラーは、JVM を必要としなくなった場合を除き、これらからの回復を試みるべきではありません。

jvm が終了しないため、以下があるかどうかを確認する必要がある場合があります。

  1. Runtime.addShutdownHookの使用

  2. JVM 起動時の -Xrs オプションの存在

  3. sun.misc.SignalHandler の使用。

これは、Spring ソース コードの AbstractApplicationContext.registerShutdownHook() です。

public void registerShutdownHook() {
if (this.shutdownHook == null) {
        // No shutdown hook registered yet.
    this.shutdownHook = new Thread() {
        @Override
        public void run() {
        doClose();
        }
    };
    Runtime.getRuntime().addShutdownHook(this.shutdownHook);
}
}
于 2013-03-08T11:19:52.363 に答える