web-dev-qa-db-ja.com

SIGTERMを処理する方法

Javaに受信したSIGTERMを処理する方法はありますか?

58

はい、 Runtime.addShutdownHook() でシャットダウンフックを登録できます。

59

shutdown hook を追加して、クリーンアップを実行できます。

このような:

public class myjava{
    public static void main(String[] args){
        Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
            public void run() {
                System.out.println("Inside Add Shutdown Hook");
            }   
        }); 

        System.out.println("Shut Down Hook Attached.");

        System.out.println(5/0);     //Operating system sends SIGFPE to the JVM
                                     //the JVM catches it and constructs a 
                                     //ArithmeticException class, and since you 
                                     //don't catch this with a try/catch, dumps
                                     //it to screen and terminates.  The shutdown
                                     //hook is triggered, doing final cleanup.
    }   
}

次に実行します:

el@apollo:~$ javac myjava.Java
el@apollo:~$ Java myjava 
Shut Down Hook Attached.
Exception in thread "main" Java.lang.ArithmeticException: / by zero
        at myjava.main(myjava.Java:11)
Inside Add Shutdown Hook
38
Edward Dale

Javaでシグナルを処理する別の方法は、Sun.misc.signalパッケージを使用することです。 http://www.ibm.com/developerworks/Java/library/i- signalhandling / 使用方法を理解するため。

注:Sun. *パッケージ内にある機能は、すべてのOSで移植/動作が同じではない可能性があることも意味します。しかし、あなたはそれを試してみたいかもしれません。

5
arcamax