Comment puis-je intercepter Ctrl + C(qui normalement tuerait le processus) dans une application Java CLI (interface de ligne de commande)?
Existe-t-il une solution multi-plateforme (Linux, Solaris, Windows)?
J'utilise Console
« s readLine()
, mais si nécessaire, je pourrais utiliser une autre méthode pour lire les caractères de l' entrée standard.
java
command-line
stdin
command-line-interface
copy-paste
ivan_ivanovich_ivanoff
la source
la source
Je suppose que vous voulez arrêter gracieusement et ne pas court-circuiter le processus d'arrêt. Si mon hypothèse est correcte, alors vous devriez regarder Shutdown Hooks .
la source
Afin de pouvoir gérer Ctrl+ Csans arrêter pour une raison quelconque, vous devrez utiliser une forme de gestion du signal (puisque l' entrée Ctrl+ Cn'est pas réellement transmise directement à votre application, mais est plutôt gérée par le système d'exploitation qui génère un SIGINT qui est ensuite passé à Java.
Voir http://www.oracle.com/technetwork/java/javase/signals-139944.html pour plus de détails sur la gestion des signaux.
(Si vous souhaitez simplement arrêter gracieusement, la réponse d'akf suffira.)
la source
Quelques liens sur la façon de gérer SIGTERM - c'est le signal que le programme reçoit du côté du système d'exploitation:
http://blog.webinf.info/2008/08/intercepting-sigterm.html
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html
http://www.ibm.com/developerworks/java/library/i-signalhandling/
Cela devrait fonctionner sur les systèmes d'exploitation POSIX - c'est-à-dire que Mac et Unix devraient fonctionner, sous Windows, je ne suis pas sûr, je me souviens avoir entendu dire qu'il est également compatible POSIX dans une certaine mesure, mais pourrait beaucoup varier avec différentes versions.
la source