2009-08-01 2 views

risposta

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

Questo dovrebbe essere in grado di intercettare il segnale, ma solo come una tappa intermedia prima della JVM completamente arresti stesso, in modo che non può essere quello che stai cercando dopo.

È necessario utilizzare un SignalHandler (sun.misc.SignalHandler) per intercettare il segnale SIGINT innescato da un Ctrl +C (su Unix e su Windows).
Vedere this article (pdf, pagina 8 e 9).

+0

Link is dead ... –

+5

@MartijnCourteaux Ciò accade dopo cinque anni;) Ho trovato una fonte simile su questo argomento e ho modificato il collegamento di conseguenza. – VonC

+0

@VonC - È di nuovo morto – GurV

15

Suppongo che si desideri eseguire lo shutdown con garbo e non cortocircuitare il processo di spegnimento. Se la mia ipotesi è corretta, allora dovresti guardare a Shutdown Hooks.

+0

Mai sentito parlare di hook di chiusura prima. Grazie! –

7

Al fine di essere in grado di gestire Ctrl +C senza spegnere per qualche motivo, è necessario utilizzare una qualche forma di segnale di gestione (dal momento che il Ctrl +C ingresso non è in realtà passò direttamente alla tua domanda, ma invece è gestito dal sistema operativo che genera un SIGINT che viene quindi passato al Java.

Vedi http://www.oracle.com/technetwork/java/javase/signals-139944.html per i dettagli sulla gestione del segnale.

(Se siete semplicemente desideroso di con grazia arresto, la risposta di AKF sarà sufficiente.)

4

Alcuni link su come gestire SIGTERM - che è il segnale del programma è sempre sul lato OS:

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/

che dovrebbe funzionare su operativo POSIX sistemi - cioè, Mac e Unix dovrebbero funzionare, su Windows non ne sono sicuro, ricordo che anche AUDIX è in qualche modo compatibile con POSIX, ma potrebbe essere molto vile con diversi versioni.

+1

Il secondo link fallisce .È stato modificato in Oracle a http://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf? Anche il terzo collegamento – chance

+0

non funziona –