Existe-t-il un moyen dans Java pour gérer un SIGTERM reçu?
Oui, vous pouvez enregistrer un hook d'arrêt avec Runtime.addShutdownHook()
.
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
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.