Comment gérer un SIGTERM

Existe-t-il un moyen en Java de gérer un SIGTERM reçu?

43
demandé sur Gray 2010-06-04 18:53:41

3 réponses

Oui, vous pouvez enregistrer un arrêt crochet avec Runtime.addShutdownHook().

48
répondu Matthew Flaschen 2010-06-04 14:56:16

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

Comme ceci:

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

Puis exécutez-le:

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
27
répondu scompt.com 2018-07-09 19:38:31

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

Remarque: la fonctionnalité étant dans sun.* package signifierait également qu'il peut ne pas être portable/se comporter de la même manière sur tous les systèmes d'exploitation. Mais vous pouvez l'essayer.

5
répondu arcamax 2010-06-07 06:16:59