Como puedo interceptar Ctrl + C(que normalmente mataría el proceso) en una aplicación Java CLI (interfaz de línea de comandos)?
¿Existe una solución multiplataforma (Linux, Solaris, Windows)?
Estoy usando Console
's readLine()
, pero si es necesario, podría usar algún otro método para leer caracteres de la entrada estándar.
java
command-line
stdin
command-line-interface
copy-paste
ivan_ivanovich_ivanoff
fuente
fuente
Supongo que desea apagar correctamente y no cortocircuitar el proceso de apagado. Si mi suposición es correcta, entonces debería mirar Shutdown Hooks .
fuente
Para poder manejar Ctrl+ Csin apagar por alguna razón, necesitará usar alguna forma de manejo de señales (ya que la entrada Ctrl+ Cno se pasa directamente a su aplicación, sino que es manejada por el sistema operativo que genera un SIGINT que luego se pasa a Java.
Consulte http://www.oracle.com/technetwork/java/javase/signals-139944.html para obtener detalles sobre el manejo de señales.
(Si solo desea cerrar con elegancia, la respuesta de akf será suficiente).
fuente
Algunos enlaces sobre cómo manejar SIGTERM, esa es la señal que el programa está recibiendo en el lado del sistema operativo:
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/
Eso debería funcionar en los sistemas operativos POSIX, es decir, Mac y Unix deberían funcionar, en Windows no estoy seguro, recuerdo haber oído que también es compatible con POSIX hasta cierto punto, pero podría variar mucho con diferentes versiones.
fuente