Capturando Ctrl + C en Java

¿Es posible atrapar la señal Ctrl + C en una aplicación de línea de comandos java? Me gustaría limpiar algunos recursos antes de terminar el progtwig.

Puede conectar un gancho de apagado a la VM que se ejecuta cada vez que la VM se apaga:

La máquina virtual Java se apaga en respuesta a dos tipos de eventos:

  • El progtwig sale normalmente, cuando sale el último hilo no daemon o cuando se invoca el método exit (equivalentemente, System.exit), o

  • La máquina virtual finaliza en respuesta a una interrupción del usuario, como escribir Ctrl + C , o un evento en todo el sistema, como el cierre de sesión del usuario o el cierre del sistema.

Sin embargo, el hilo que pasa como shutdown hook tiene que seguir varias reglas, por lo que debe leer detenidamente la documentación vinculada para evitar cualquier problema. Esto incluye garantizar la seguridad del hilo, la terminación rápida del hilo, etc.

Además, como señala el comentarista Jesper, los ganchos de cierre se ejecutan con el apagado normal de la máquina virtual, pero si el proceso de VM finaliza a la fuerza, no lo hacen. Esto puede suceder si el código nativo se estropea o si mata por la fuerza el proceso ( kill -9 , taskkill /f ).

Pero en esos escenarios, todas las apuestas se cancelan de todos modos, así que no perdería demasiado tiempo pensando en ello.

Solo para pruebas rápidas de consola …

 Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { try { Thread.sleep(200); System.out.println("Shouting down ..."); //some cleaning up code... } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });