Come gestire un SIGTERM

C’è un modo in Java per gestire un SIGTERM ricevuto?

Sì, è ansible registrare un hook di chiusura con Runtime.addShutdownHook() .

È ansible aggiungere un hook di arresto per eseguire qualsiasi operazione di pulizia.

Come questo:

 public class myjava{ public static void main(String[] args){ Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("Inside Add Shutdown Hook"); } }); System.out.println("Shut Down Hook Attached."); System.out.println(5/0); //Operating system sends SIGFPE to the JVM //the JVM catches it and constructs a //ArithmeticException class, and since you //don't catch this with a try/catch, dumps //it to screen and terminates. The shutdown //hook is triggered, doing final cleanup. } } 

Quindi eseguilo:

 [email protected]:~$ javac myjava.java [email protected]:~$ java myjava Shut Down Hook Attached. Exception in thread "main" java.lang.ArithmeticException: / by zero at myjava.main(myjava.java:11) Inside Add Shutdown Hook 

Un altro modo per gestire i segnali in Java è tramite il pacchetto sun.misc.signal. Fare riferimento a http://www.ibm.com/developerworks/java/library/i-signalhandling/ per capire come usarlo.

NOTA: La funzionalità nel pacchetto sun. * Significherebbe anche che potrebbe non essere portabile / comportarsi allo stesso modo su tutti i sistemi operativi. Ma potresti volerlo provare.