Windows Shutdown abfangen

Mein Java Programm läuft im Hintergrund und soll mitbekommen, wenn der User sich vom System abmeldet bzw. es herunterfährt, um noch noch einige Sachen zu erledigen (Loggen, Verbindung schließen, etc.). Es würde mir schon reichen, wenn das unter Windows funktioniert.

Dazu habe ich schon einige Webforen durchforstet, habe die sogenannten Shutdown Hooks ausprobiert oder auch versucht, Systemsignale (SIGINT, etc) abzufangen mit dem SignalHandler.

Leider hat nichts davon wirklich funktioniert, in der Konsole oft ja, wenn man per Hand die VM mit STRG+C abgebrochen hat, aber beim User Abmelden wurde das Programm immer einfach nur weggekillt (zumindest machte es diesen Anschein).

Hat sowas von euch schon jemand gemacht? Gibt es da auch eine funktionierende Möglichkeit?
 
Das System wurde immer völlig normal und "sauber" heruntergefahren. Das Ergebnis war immer das gleiche, das Java-Programm scheint dabei aber eines der ersten Progs zu sein, die direkt abgeschossen werden. Ich habe gerade nochmal den Code aus deinem Link probiert (obwohl sich dieser sehr an meinen ähnelt vom Prinzip her), aber es ist immer das gleiche, der Shutdown Hook Thread wird immer aufgerufen, wenn man mit STRG+C beendet oder das Programm selbst zu Ende ist (System.exit), aber beim Herunterfahren wird alles direkt abgebrochen ohne Shutdown Hook...
 

Andi_CH

Top Contributor
Zum Thema "nicht zu viel Zeit verbrauchen" - es gibt doch Prozesse die den shutdown blockieren (es mag ein Fehlerfall sein - egal) Ist es nicht möglich Windows darum zu "bitten" ein wenig zu warten?
 
Zuletzt bearbeitet:
B

Bradworst12

Gast
Also unter Windows, kannst du in den Registry Einträgen irgendwo das Zeitintervall (in ms) angeben, die Windows auf andere Prozesse warten soll bis es runterfährt. Eventuell ist das ein Ansatz für dich, aber wäre wie gesagt halt nur eine lokale Lösung, wenn nur du die Anwendung benutzt.

Grüße
Gast
 
Egal ob Windows, Linux etc.
Beim Herunterfahren wird kein Shutdown Hook ausgeführt.
Es obliegt dem Benutzer vor dem Herunterfahren alle Anwendungen - also JRE/JDK - sauber zu Beenden.
Fals nicht, Pech. Es wäre auch dumm, beim herunterfahren einen neuen Thread start zu lassen, was der Shutdown-Hook ja tut.
Allerdings wäre es vieleicht möglich, das Term Signal mit den Klassen SignalHandler und Signal abzufangen und zu reagieren.
(sum.misc.SignalHandler und sun.misc.Signal). Das wäre mein Ansatz für diese Aufgabenstellung.
 
Also, den SignalHandler hatte ich ja, wie oben geschrieben, auch schon probiert, wenn der überhaupt reagierte, dann auch nur auf STRG+C.

Falls nicht, Pech. Es wäre auch dumm, beim herunterfahren einen neuen Thread start zu lassen, was der Shutdown-Hook ja tut.

Nunja, so kategorisch klar ist das ja nun nicht, dann könnte man auch gleich sagen, es wäre dumm bei Programm beenden einen Thread zu starten, aber genau dazu ist nunmal der ShutdownHook da.

Interessanterweise wird in vielen Dokus beschrieben, dass der ShutdownHook auch für den OS Shutdown da sei...als ob es mal "früher" funktioniert hat in älteren JREs o.ä.

In der WindowsRegistry möchte ich auch nicht rumspielen, das ist für mich keine Lösung, ich denke auch das bringt nix, denn "lang" dauert mein Shutdown Hook nicht, er wird ja nie aufgerufen...

Das mit der JNI Bibliothek scheint mir noch am sinnvollsten...nur am Ende wird es so wie beim SignalHandler, was nutzt eine C-Bibliothek, wenn die ganze JVM trotzdem von Windows abgeschossen wird...
 

Empire Phoenix

Top Contributor
Wie wärs andersrum? nen mini c programm das dein java program als subprocess startet, das c programm blockiert das runterfahren und gibt einfach an den java subprocess per instream nen shutdown befehl weiter?

AM rande was genau muss das programm überhaupt tun? Weil jede gut programmierte DB kommt damit zurecht wennse abgeschossen wird. Und wennde den log entsprechend immer flushst hasste da auch alles rausgeschreiben.
 
Wie wärs andersrum? nen mini c programm das dein java program als subprocess startet, das c programm blockiert das runterfahren und gibt einfach an den java subprocess per instream nen shutdown befehl weiter?


Könnte da jemand einen kleinen Codeschnipsel zusammenbasteln? Mit C(++) bin ich nach wie vor Neuling und habe mich gestern schon intensiv mit dem Shutdown abfangen in C beschäftigt, bekomme es aber vorerst noch nicht so richtig hin. :rtfm:

AM rande was genau muss das programm überhaupt tun? Weil jede gut programmierte DB kommt damit zurecht wennse abgeschossen wird. Und wennde den log entsprechend immer flushst hasste da auch alles rausgeschreiben.

Das Java Programm ist nunmal so "da" wie es ist, beim Beenden sollen nicht nur Verbindungen geschlossen werden, es soll, einfach gesagt, protokolliert werden, zu welcher Zeit beendet wurde und deswegen kann es nicht einfach "abgeschossen" werden.
 

faetzminator

Gesperrter Benutzer
Unter Linux werden Prozesse normalerweise mit [c]kill -15[/c] (SIGTERM) beendet, danach - wenn immer noch am laufen - mit [c]kill -9[/c] (SIGKILL) abgeschossen. Nichtsdestotrotz hab ich dort auch schon festgestellt, dass schon nur beim SIGTERM zu wenig Zeit vorhanden war, alles abzuarbeiten. Sind villeicht einfach nur ein paar Prozessortakte?
Auf alle Fälle solltest du nicht mit den Shutdownhooks arbeiten, da die nicht zuverlässig sind. Wenn du z.B. Settings speichern willst, kannst du dir bei Änderungen irgendein Tempfile machen (anstatt gleich das richtige Configfile zu überschreiben). Und wenn das Programm startet und das File noch dort ist - dann kann der User die Einstellungen wiederherstellen. Natürlich wird bei einem Save oder beim Beenden (mit oder ohne Save) das File gelöscht.
Das Java Programm ist nunmal so "da" wie es ist, beim Beenden sollen nicht nur Verbindungen geschlossen werden, es soll, einfach gesagt, protokolliert werden, zu welcher Zeit beendet wurde und deswegen kann es nicht einfach "abgeschossen" werden.
Da kannst du aber auch einfach jede Minute irgendwo hinloggen o.ä. Warum ist das für dich so wichtig? Oder allenfalls sieht man auch den Timestamp des Logs!?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Windows shutdown? Allgemeine Java-Themen 12
R -jar der Windows-Registry hinzufügen Allgemeine Java-Themen 1
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
izoards JAR als Windows Service mit Appache Procrun (prunsrv) Allgemeine Java-Themen 6
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
N iText keine Sonderzeichen und Umlaute unter Windows Allgemeine Java-Themen 13
MarekLanger Filebeat in Docker unter Windows Allgemeine Java-Themen 1
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Console geht nicht auf (Windows 10) Allgemeine Java-Themen 3
M TomEE auf Windows Server 2016 installieren Allgemeine Java-Themen 4
Thallius Rätsel für Windows Profis Allgemeine Java-Themen 8
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
T Java Windows sounds erkennen Allgemeine Java-Themen 1
P Java als Windows Dienst Allgemeine Java-Themen 2
I GUI für kleine Pop-Ups unter Windows Allgemeine Java-Themen 1
H Änderung im maximalen heap space unter Windows 7 ?! Allgemeine Java-Themen 5
dereki2000 Windows Benachrichtigung erzeugen Allgemeine Java-Themen 2
Neumi5694 Task-Name unter Windows Allgemeine Java-Themen 4
M Checkliste mit erweiterbaren Einträgen, Baumstruktur, wie Windows Explorer Navigation Allgemeine Java-Themen 2
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
R JDK installieren JDK / Maven auf Windows 10 installieren Allgemeine Java-Themen 9
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
D Jsch nur für Windows? Allgemeine Java-Themen 2
X JDK installieren Weiß jemand, wie ich GCJ (WINDOWS) installieren und anwenden kann? Allgemeine Java-Themen 11
D JRE in .jar verpacken unter Windows Allgemeine Java-Themen 4
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
D Aktuell installierte Java Version auslesen unter Windows Allgemeine Java-Themen 5
S Executable Jar File startet nicht unter Windows 10 Allgemeine Java-Themen 3
C Windows RCP Application unter Linux bauen lassen Allgemeine Java-Themen 3
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
M Windows 98 - Mit welchem JDK (Version) kann noch Programm dafür erstellt werden Allgemeine Java-Themen 6
Tom299 Beliebiges Windows-Programm / Prozess in den Vordergrund bringen Allgemeine Java-Themen 4
D Konsoleneingabe ist in Windows CMD nicht sichtbar Allgemeine Java-Themen 4
P Effizientes Programmieren - oder Windows Autostart fürs Herunterfahren Allgemeine Java-Themen 11
O Zugriff auf Windows Zertifikatstore Allgemeine Java-Themen 2
F Windows Umlaute Allgemeine Java-Themen 15
T Windows-Kontextmenü Eintrag hinzufügen? Allgemeine Java-Themen 3
O Socket-Unterschiede zwischen Windows und Ubuntu Allgemeine Java-Themen 2
G Wie installiere ich javax-usb unter windows? Allgemeine Java-Themen 0
M Swing Windows und Ubuntu Allgemeine Java-Themen 4
H JFileChooser soll NUR Windows-Netzwerkumgebung anzeigen Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
HarleyDavidson Tomcat VS Windows Scheduled Task Allgemeine Java-Themen 4
T JNI: kein Zugriff auf VM in Callback-Methode eines Windows-Hooks Allgemeine Java-Themen 3
W Windows (Service) Hooking Allgemeine Java-Themen 8
M Java auf Linux und Windows Allgemeine Java-Themen 6
R Windows-Firewall lässt Java nicht durch Allgemeine Java-Themen 17
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
N Input/Output Mit Windows 7 erzeugtes zip-File in Java 7 öffnen Allgemeine Java-Themen 5
P Eclipse Unter Windows erstelle .jar unter Linux (Ubuntu) funktioniert nicht Allgemeine Java-Themen 5
R ZIP FileSystem unter Windows wirft exception Allgemeine Java-Themen 7
njans Windows Verknüpfung von Icon Allgemeine Java-Themen 2
P windows mit java bedienen Allgemeine Java-Themen 8
X Windows-Environment-Variable per jRegistryKey anpassen Allgemeine Java-Themen 6
P .Jar Datein Windows Konsole zugewiesen Allgemeine Java-Themen 3
C Encoding Problem Windows Allgemeine Java-Themen 9
L Input/Output ProcessBuilder und Windows - Konsole verbergen? Allgemeine Java-Themen 5
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
R Änderungen in einem Verzeichnis beobachten - Windows Allgemeine Java-Themen 3
A Nach Benutzerwechsel mit anderem Account in Windows anmelden Allgemeine Java-Themen 8
T Jar File läuft unter Windows aber nicht unter linux Allgemeine Java-Themen 10
B Windows Konsolenbefehle Allgemeine Java-Themen 3
Z Probleme bei Stringvergleichen (Windows/Linux) Allgemeine Java-Themen 10
E CMD Registry Key für Windows 7? Allgemeine Java-Themen 9
TiME-SPLiNTER vlcj und Windows Allgemeine Java-Themen 15
S Prozess der von anderem Prozess gestartet wurde beenden? (Windows Bildschirmtastatur) Allgemeine Java-Themen 4
G Input/Output URLDecoder.decode - Unterschiedliche Ergebnisse Windows / Linux Allgemeine Java-Themen 2
R Windows ermitteln ob Administratorrechte vorhanden Allgemeine Java-Themen 17
Y MenuBar -> Windows / Mac OS X Allgemeine Java-Themen 2
L Java Quellcode auf Windows 7 ausführen? Allgemeine Java-Themen 3
I Encoding Problem bei exec und Windows Allgemeine Java-Themen 2
R Windows - User Passwort ändern Allgemeine Java-Themen 2
F java prog als windows-dienst. Erfahrungen? Allgemeine Java-Themen 2
R Dateien vom Windows-Explorer zum Programm senden Allgemeine Java-Themen 21
H Standard Windows-Druck-Dialog Allgemeine Java-Themen 2
S Windows "öffnen mit..." Allgemeine Java-Themen 4
D Clipboard getSystemSelection() funktioniert unter Windows* nicht Allgemeine Java-Themen 3
M Nach Programmdurchlauf werden Zeichen falsch dargestellt + Anderes Verhalten unter Windows Allgemeine Java-Themen 6
P Windows Media Player starten / finden Allgemeine Java-Themen 2
D Windows-Konsole auslesen - Zeichenkodierung Allgemeine Java-Themen 4
J Path-Eintrag unter Windows 7 Allgemeine Java-Themen 11
Q .jar wird mit cmd gestartet - Zuordnung von Dateitypen ändern (Windows 7) Allgemeine Java-Themen 7
G jad JDK1.6 Windows 7 Allgemeine Java-Themen 2
Z Position/Größe von Windows-Fenstern ermitteln Allgemeine Java-Themen 12
Z Probleme mit Java unter Vista/ Windows 7 Allgemeine Java-Themen 12
O Jar-Datei auf Windows 98 Allgemeine Java-Themen 6
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
M Runtime.getRuntime().exec(cmd); auf windows ... Allgemeine Java-Themen 2
P Runnable Jar File über Windows ausführbar doch über Linux nicht Allgemeine Java-Themen 8
A JavaVM Zeit Windows 7 Allgemeine Java-Themen 9
P USB Temperatursensor auslesen Windows Allgemeine Java-Themen 7
T Mac OS X <--> Windows XP Portierungsprobleme Allgemeine Java-Themen 7
G Textdatei einlesen unter Windows 7 Allgemeine Java-Themen 4
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben