5

UNIXサーバーでJavaプログラムを正常に終了させようとしています。jarファイルがあります。これは午前中にcronジョブから開始します。次に、夕方にシャットダウンしたいときに、PIDを見つけてを呼び出すスクリプトを呼び出すcronジョブがありますkill -9 <PID>。ただし、この方法で終了すると、シャットダウンフックがアクティブになっていないようです。私も試しましたがkill <PID>(-9はありません)、同じ問題が発生します。シャットダウンフックが呼び出されることを確認するにはどうすればよいですか?あるいは、毎日私のプロセスを殺すためのより良い方法があるかもしれません。

class ShutdownHook {

    ShutdownHook() {}

    public void attachShutDownHook() {

        Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
                System.out.println("Shut down hook activating");
         }
        });
        System.out.println("Shut Down Hook Attached.");
    }   
}
4

3 に答える 3

6

Unix で次のようなコードを使用して、SIGINT (#2) シグナルをトラップできます。

Signal.handle(new Signal("INT"), new SignalHandler() {
      public void handle(Signal sig) {
      // Forced exit
      System.exit(1);
   }
});
于 2012-10-25T18:42:11.623 に答える
4

kill -9 <pid>信号を送りますKILL。この信号は、プログラムによって傍受できません。

を呼び出すkill <pid>と、TERMシグナル (15) が送信されます。その場合、JVM はシグナルをキャッチし、シャットダウン フックが実行されます。

于 2012-10-25T18:43:24.607 に答える