Vous pouvez joindre un crochet d'arrêt à la VM qui s'exécute à chaque fois que la VM s'arrête :
La machine virtuelle Java s'arrête en réponse à deux types d'événements :
-
Le programme se termine normalement, lorsque le dernier thread non démon se termine ou lorsque la méthode exit (équivalente à System.exit) est invoquée, ou
-
La machine virtuelle est arrêtée en réponse à une interruption de l'utilisateur, par exemple en tapant Ctrl + C ou un événement touchant l'ensemble du système, tel que la déconnexion d'un utilisateur ou l'arrêt du système.
Le fil que vous passez en tant que crochet d'arrêt doit cependant respecter plusieurs règles, alors lisez attentivement la documentation liée pour éviter tout problème. Il s'agit notamment d'assurer la sécurité des threads, la terminaison rapide du thread, etc.
De plus, comme le souligne Jesper, les crochets d'arrêt sont garantis de s'exécuter lors de l'arrêt normal de la VM, mais pas si le processus de la VM est arrêté de force. Cela peut se produire si le code natif se plante ou si vous arrêtez le processus de force ( kill -9
, taskkill /f
).
Mais dans ces scénarios, tout est perdu de toute façon, et je ne m'y attarderais donc pas trop.
0 votes
En rapport : Capturer le SIGINT en Java