# Programm sauber beim herunterfahren des Rechners beenden



## swas (15. April 2011)

Hallo,

ich hab mal wieder eine tolle Frage... 
Zur Situation:

Ich bin gerade einen kleinen "Dienst" am programmieren. Dieser soll im Hintergrund laufen. Was mir einwenig Bauchschmerzen bereitet ist, dass wenn ich den Rechner jetzt einfach herunterfahre das Programm einfach gekillt wird und sich nicht sauber beendet.

Ich habe nach einigen Möglichkeiten gesucht aber finde leider keine passende. Die ShutdownHooks helfen mir denk ich nicht weiter weil sie für eine andere Situation gedacht sind.

Hat wer ne Idee dazu?

Gruß,
swas


----------



## Bratkartoffel (15. April 2011)

Hi,

bin mir zwar nicht 100%ig sicher wie es bei Windows ist, bei Linux wird aber zuerst ein SIGTERM an das Programm geschickt. Dann hat es eine gewisse Zeitspanne zum aufräumen und wird (wenn das zu lange dauert oder das Programm nicht reagiert) danach dann mit einem SIGKILL weggeschossen.

Schau mal am Besten ob du mit Java unter Windows auch Signale abfangen und darauf reagieren kannst.

Gruß
Simon


----------



## Anime-Otaku (15. April 2011)

Im Grunde ist es doch ähnlich wie wenn das Programm über ALT+F4 bzw. dem X oben rechts beendet wird?

Wenn du etwas beim beenden ausführen willst hilft dir vlt der ShutdownHook:

http://javawiki.sowas.com/doku.php?id=java:shutdownhook


----------



## genodeftest (16. April 2011)

Genau.
Das funktioniert unter Windows wie unter Linux. Das Betriebssystem gibt dem Programm einen Befehl zum beenden. Wenn nach (z.B. 5 Sekunden) noch nichts passiert ist, wird das Programm abgewürgt.
Du solltest aber keine Zeitintensiven Dinge mehr ausführen. Die Rechner der Nutzer können sehr langsam sein.

Es gibt allerdings Probleme:
- Tuning-Programme verändern die Zeit, die die Programme zum beenden haben (z.T. unter dem Namen "Herunterfahren beschleunigen)
- Wenn der PC langsam ist und/oder viele Programme dauerhaft laufen, kann es sein, dass dein Programm abgewürgt wird, obwohl es nur wenig Rechenleistung benötigt
Darauf würde ich die Nutzer des Programms explizit hinweisen. evtl. findest du auch die Einstellung (unter Windows: Registry-Key), um die Zeitspanne etwas zu verlängern.

EDIT: Unter Windows nennt sich das "WaitToKillApplication", siehe http://www.addictivetips.com/windows-tips/how-to-speed-up-windows-shutdown-process/

Unter Unix wird die Zeitspanne mit Hilfe von 
	
	
	



```
shutdown -t xx
```
 festgelegt, wobei xx die Anzahl der Sekunden ist, siehe http://linux.about.com/od/commands/l/blcmdl8_shutdow.htm
Die Zeit dürfte in der /etc/init.conf festgelegt sein, allerdings gibt es die bei mir (Ubuntu 10.10) nicht.


----------

