Dienste, Child-Prozesse und Windows Shutdown

23/07/2012 - 11:24 von Daniel Weber | Report spam
Hallo zusammen,

gegeben ist ein Dienst (C++) der einen oder mehrere Child-Prozesse
(Java) startet, überwacht und ggf. bei unerwartetem Ableben erneut
startet. Funktioniert soweit sein Jahren problemlos.

Nun stellen wir fest, dass bei einem Windows Shutdown/Restart zuerst die
Java-Child-Prozesse hart beendet werden (möglicherweise reagiert
java.exe auch auf WM_ENDSESSION mit dem harten Ende), der Dienst làuft
zu diesem Zeitpunkt aber noch, sieht den Child-Prozess sterben und
startet ihn neu.

Gibt es die Möglichkeit, dass der Dienst, obwohl er vom Service-Monitor
noch kein "Stop" bekommen hat, erkennen kann, dass das System gerade
einen Shutdown/Restart macht, damit wir die Child-Prozesse in dem Fall
nicht wieder anwerfen?

Ciao,
Daniel
 

Lesen sie die antworten

#1 Uwe Sieber
23/07/2012 - 12:58 | Warnen spam
Daniel Weber wrote:
Hallo zusammen,

gegeben ist ein Dienst (C++) der einen oder mehrere Child-Prozesse
(Java) startet, überwacht und ggf. bei unerwartetem Ableben erneut
startet. Funktioniert soweit sein Jahren problemlos.

Nun stellen wir fest, dass bei einem Windows Shutdown/Restart zuerst die
Java-Child-Prozesse hart beendet werden (möglicherweise reagiert
java.exe auch auf WM_ENDSESSION mit dem harten Ende), der Dienst làuft
zu diesem Zeitpunkt aber noch, sieht den Child-Prozess sterben und
startet ihn neu.

Gibt es die Möglichkeit, dass der Dienst, obwohl er vom Service-Monitor
noch kein "Stop" bekommen hat, erkennen kann, dass das System gerade
einen Shutdown/Restart macht, damit wir die Child-Prozesse in dem Fall
nicht wieder anwerfen?



Da hilft nur ein kleiner Helfer-Prozess mit unsichtbarem
Fenster, der im User-Kontext làuft. Wenn der WM_SESSION
(unter XP kommt vorher noch WM_QUERYENDSESSION) empfàngt,
schickst Du das z.B. per Pipe nach unten an den Service.
Oder Du überwachst einfach den Helfer-Prozess und wenn
der beendet wird, wirds wohl ein Session-Ende sein -
abstürzen wird er in Ermangelung jeglicher Funktionalitàt
wohl nicht :-)

Gruß Uwe

Ähnliche fragen