简体   繁体   中英

How to handle a SIGTERM

Java中是否有办法处理收到的SIGTERM?

是的,您可以使用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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM