如何处理 SIGTERM

在 Java 中是否有处理接收到的 SIGTERM 的方法?

54366 次浏览

Yes, you can register a shutdown hook with Runtime.addShutdownHook().

You could add a shutdown hook to do any cleanup.

Like this:

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.
}
}

Then run it:

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

Another way to handle signals in Java is via the sun.misc.signal package. Refer to http://www.ibm.com/developerworks/java/library/i-signalhandling/ for understanding how to use it.

NOTE: The functionality being within sun.* package would also mean that it may not be portable/behave-the-same across all OS(s). But you may want to try it out.