SIGKILL-Signalverarbeitung in Java
Das SIGKILL-Signal, das häufig mit dem Befehl kill -9 verbunden ist, kann von keinem Programm verarbeitet oder erfasst werden in Java oder einer anderen Sprache. Dabei handelt es sich um eine absichtliche Designfunktion, die die Fähigkeit gewährleistet, auch nicht reagierende oder böswillige Prozesse zu beenden.
Da SIGKILL nicht verwaltbar ist, sollte der Schwerpunkt auf die Verarbeitung des SIGTERM-Signals verlagert werden, das eine kontrollierte Abschaltanforderung darstellt. Java bietet die Methode Runtime.addShutdownHook() zum Registrieren von Shutdown-Hooks, die ausgeführt werden, wenn das Programm ein SIGTERM empfängt oder ordnungsgemäß beendet wird.
Registrieren von Shutdown-Hooks
Zum Registrieren ein Shutdown-Hook:
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // Perform cleanup tasks System.out.println("Shutdown hook ran!"); } });
Beispiel Programm
Das folgende Testprogramm demonstriert die Verwendung von Shutdown-Hooks unter OSX:
public class TestShutdownHook { public static void main(String[] args) throws InterruptedException { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("Shutdown hook ran!"); } }); while (true) { Thread.sleep(1000); } } }
Wenn Sie dieses Programm mit kill -15 (SIGTERM) ausführen, wird „Shutdown Haken rannte!" wie erwartet.
Kill -9 handhaben
Wie bereits erwähnt, kann kill -9 nicht ordnungsgemäß gehandhabt werden. Sie können jedoch eine Problemumgehung implementieren, indem Sie ein Wrapper-Skript oder ein Watcher-Programm verwenden, das Ihre Hauptanwendung überwacht. Wenn die Hauptanwendung beendet oder beendet wird, kann der Watcher Bereinigungsaufgaben ausführen oder andere Anwendungen benachrichtigen.
Beispiel-Wrapper-Skript
#!/usr/bin/env bash java TestShutdownHook wait # notify your other app that you quit echo "TestShutdownHook quit"
Das obige ist der detaillierte Inhalt vonKann Java SIGKILL-Signale verarbeiten und was ist die Alternative für ein ordnungsgemäßes Herunterfahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!