Gibt es in Java eine Möglichkeit, ein empfangenes SIGTERM zu verarbeiten?
Gibt es in Java eine Möglichkeit, ein empfangenes SIGTERM zu verarbeiten?
Antworten:
Ja, Sie können einen Shutdown-Hook bei registrieren Runtime.addShutdownHook()
.
Sie können einen Shutdown-Hook hinzufügen , um eine Bereinigung durchzuführen.
So was:
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.
}
}
Dann führen Sie es aus:
el@apollo:~$ javac myjava.java
el@apollo:~$ 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
Eine andere Möglichkeit, Signale in Java zu verarbeiten, ist das Paket sun.misc.signal. Informationen zur Verwendung finden Sie unter http://www.ibm.com/developerworks/java/library/i-signalhandling/ .
HINWEIS: Die Funktionalität innerhalb des sun. * -Pakets würde auch bedeuten, dass es möglicherweise nicht auf allen Betriebssystemen portabel ist / sich gleich verhält. Aber vielleicht möchten Sie es ausprobieren.
System.exit(1)
er woanders ausgeführt wird? Ich versuche, diesem Muster zu folgen, um den kontrollierten Stopp für mein Multithread-Java-Programm zu handhaben, und finde, dassSystem.exit(1)
die JVM dadurch nicht beendet wird.