web-dev-qa-db-fra.com

Comment gérer un SIGTERM

Existe-t-il un moyen dans Java pour gérer un SIGTERM reçu?

58

Oui, vous pouvez enregistrer un hook d'arrêt avec Runtime.addShutdownHook() .

59
Matthew Flaschen

Vous pouvez ajouter un crochet d'arrêt pour effectuer tout nettoyage.

Comme ça:

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

Exécutez-le ensuite:

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

Une autre façon de gérer les signaux dans Java est via le package Sun.misc.signal. Reportez-vous à http://www.ibm.com/developerworks/Java/library/i- signalhandling / pour comprendre comment l'utiliser.

REMARQUE: La fonctionnalité se trouvant dans le package Sun. * signifierait également qu'elle pourrait ne pas être portable/se comporter de la même manière sur tous les systèmes d'exploitation. Mais vous voudrez peut-être l'essayer.

5
arcamax