Javaに受信したSIGTERMを処理する方法はありますか?
はい、 Runtime.addShutdownHook()
でシャットダウンフックを登録できます。
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
Javaでシグナルを処理する別の方法は、Sun.misc.signalパッケージを使用することです。 http://www.ibm.com/developerworks/Java/library/i- signalhandling / 使用方法を理解するため。
注:Sun. *パッケージ内にある機能は、すべてのOSで移植/動作が同じではない可能性があることも意味します。しかし、あなたはそれを試してみたいかもしれません。