In Java gibt es eine spezielle Runtime
Methode dafür: addShutdownHook
.
Damit können Sie einen Thread initialisieren, den die JVM vor dem Anhalten ausführen möchte.Es ist der Ort, um alle Aufräumarbeiten, die Sie ausführen möchten, auch im Falle von Ctrl-C des Schließens des übergeordneten Fensters zu platzieren. Auszug aus javadoc: Ein Shutdown-Hook ist einfach ein initialisierter aber nicht gestarteter Thread. Wenn die virtuelle Maschine mit dem Herunterfahren beginnt, werden alle registrierten Shutdown-Hooks in einer nicht angegebenen Reihenfolge gestartet und gleichzeitig ausgeführt. Wenn alle Hooks beendet sind, werden alle nicht abgeschlossenen Finisher ausgeführt, wenn die Finalisierung beim Beenden aktiviert wurde. Schließlich wird die virtuelle Maschine angehalten.
Der Abschalt-Hook ist Aufruf, auch wenn das Programm normal endet. In diesem Fall ist es sauberer die registrierte Haken zu entfernen, bevor mit removeShutdownHook
(noch eine Methode aus Runtime
)
EDIT verlass:
Im Fall von Windows-Umgebung gibt es keine wirklichen Signale, aber spezieller Rückruf, wenn System wird heruntergefahren. AFAIK, der System-Hook wird in diesem Fall korrekt aufgerufen, aber ich gebe zu, dass ich das nie wirklich getestet habe. In Windows können Prozesse mit 2 Möglichkeiten aufgefordert werden, zu beenden:
- PostQuitMessage Funktion Beiträgen einer WM_QUIT Nachricht in Prozessereignisschleife - normalerweise sollte der Prozess beenden, aber es kann seine Bereinigung (equivallent von Unix SIG_TERM) tut
- TerminateProcess sofort stoppt den Prozess und alle seine Fäden (equivallent von Unix SIG_KILL)
Console Prozesse können einen ConsoleControlHandler verwenden, die Ctrl-C abfangen kann, Ctrl-Break oder Strg-Close Ereignisse. Die ersten beiden werden über die Tastatur generiert, die letzte wird generiert, wenn der Benutzer die Konsole schließt. Normalerweise sollte die Oracle JVM jedoch den Hook-Mechanismus des Systems verwenden, wenn sie das Ereignis Ctrl-Close erhält, das wie ein SIGTERM verarbeitet wird.
Antwort http://stackoverflow.com/a/20568883/4428150 erzählt, wie man das von C. – Gustave