actualización de mayo de 2012 (2 años y medio después)
Trejkaz comentarios:
En las versiones actuales de Java el código de manejo de señales falla porque la señal "INT
" está "reservada por la VM o el SO".
Además, ninguno de los otros nombres de señal válidos realmente se activan cuando algo solicita que la aplicación se cierre (solo probé minuciosamente todos los que pude averiguar sobre ...)
El gancho de cierre funciona principalmente pero encontramos que nuestro caso no está disparando, por lo que el siguiente paso es, obviamente, que recurrir a registrar un manejador detrás de la JVM volver
en el capítulo "Integrating Signal and Exception Handling" de la "Troubleshooting Guide for HotSpot VM" menciona las señales "SIGTERM
, SIGINT
, SIGHUP
" solo para Solaris OS y Linux.
Solo se menciona el Manejo de excepciones en Windows.
respuesta
original (septiembre de 2009)
un ShutdownHook debe ser capaz de manejar ese caso
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// what you want to do
}
}));
(con caveats)
Consulte también:
como una ilustración de manejo de señal simple:
public class Aaarggh {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("INT"), new SignalHandler() {
public void handle(Signal sig) {
System.out.println(
"Aaarggh, a user is trying to interrupt me!!");
System.out.println(
"(throw garlic at user, say `shoo, go away')");
}
});
for(int i=0; i<100; i++) {
Thread.sleep(1000);
System.out.print('.');
}
}
}
¿Cómo lidiar con la pregunta SIGINT: http://stackoverflow.com/questions/2541475/capture- sigint-in-java –