¿Cómo puedo interceptar Ctrl+C (que normalmente sería matar el proceso)
en un CLI (command line interface) de Java de la aplicación?

Hace un multi-plataforma de solución existen (Linux, Solaris, Windows)?

Estoy usando Console‘s readLine(), pero si es necesario, yo podría utilizar algún otro método
para leer caracteres de la entrada estándar.

4 Comentarios

  1. 117
    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() { /*
           my shutdown code here
        */ }
     });

    Este debe ser capaz de interceptar la señal, pero sólo como un paso intermedio antes de la JVM completamente apagados sí, por lo que no puede ser lo que usted está buscando después.

    Necesita usar un SignalHandler (sun.misc.SignalHandler) para interceptar la SIGINT de la señal provocada por una Ctrl+C (en Unix como en Windows).

    Ver este artículo (pdf, página 8 y 9).

    • El enlace está muerto…
    • Que sucede después de cinco años 😉 he encontrado una fuente similar sobre el tema y he cambiado el enlace en consecuencia.
    • Está Muerto de nuevo
    • Que enlace? La edición la hice en abril de 2014 (stackoverflow.com/revisions/…) sigue siendo válida: usted puede descargar el archivo pdf..
  2. 16

    Estoy asumiendo que usted quiere apagar el ordenador correctamente, y no hacer un corto circuito en el proceso de cierre. Si mi suposición es correcta, entonces usted debe buscar en Ganchos De Cierre.

    • Nunca había oído hablar de ganchos de cierre antes. Gracias!
  3. 8

    Con el fin de ser capaz de manejar Ctrl+C sin necesidad de apagar por alguna razón, usted tendrá que utilizar algún tipo de tratamiento de señales (desde el Ctrl+C entrada no está realmente pasa directamente a su aplicación, sino que es manejado por el sistema operativo que genera un SIGINT que se pasa a continuación a Java.

    Ver http://www.oracle.com/technetwork/java/javase/signals-139944.html para más detalles sobre el manejo de señales.

    (Si sólo estás queriendo correctamente apagado, la ira de la respuesta será suficiente.)

  4. 4

    Algunos enlaces acerca de cómo manejar SIGTERM – que es la señal de que el programa está en el sistema operativo lado:

    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/

    Que debería funcionar en sistemas operativos POSIX, es decir, Mac y Unix debe trabajar, en windows no estoy seguro, yo recuerdo haber oído también es compatible POSIX, en cierta medida, pero podría varty mucho con diferentes versiones.

Dejar respuesta

Please enter your comment!
Please enter your name here