# Windows -> Prozesse wirklich abschießen



## Anonymaus (16. Jan 2009)

Hi

Ich nutze manchmal eine buggy Betaversion eines Programms, welches nicht mehr weiter entwickelt wird.
Dieses Programm hängt sich manchmal auf (kennt man ja auch von anderer Software...). Normalerweise öffne ich dann den Taskmanager und beende das hängende Programm. Bei diesem Programm aber passiert nicht mehr, als dass das Fenster des Tools verschwindet, in der Prozessliste wird es weiter angezeigt und verbraucht auch Resoucen, mit dem Effekt, dass ich es nicht mehr starten kann, weil es seine Files blockiert.
Nun habe ich ein wenig umhergesucht und herausgefunden, dass es das Kommando taskkill gibt. Angeblich soll "taskkill /F /PID <pid>" oder "taskkill /F /IM <programm_name>" ein Beenden erzwingen. Unter Linux kenne ich das als KILL -9 <pid>. -9 sendet dabei ein "KILL" an den Kernel, wodurch der Task unsanft entfernt wird, wenn er auf die "freundliche" Bitte (KILL -1) sich zu beenden nicht reagiert.
Leider hilft taskkill da aber auch nicht weiter. Taskkill sagt mir zwar, dass der Prozess mit der PID beendet wurde, aber es verschwindet immer noch nicht aus der tasklist. Egal wie oft ich taskkill ausführe, immer bekomme ich die Meldung, der Prozess wäre beendet worden, er bleibt aber bestehen.
Gibt es evtl. eine andere Möglichkeit, dem Kernel zu sagen, dass er den Prozess jetzt wirklich rausschmeißen soll, egal ob es auf die killmessage reagiert oder nicht? Es ist wirklich nervig, jedesmal den Rechner neu zu starten, wenn das Tool wieder mal hängt...


----------



## Ebenius (16. Jan 2009)

Ich kann Dir zu Kommandozeilentools nichts sagen. Aber wenn Du im Taskmanager auf den Task rechts-clickst, gibt's sowas wie "Prozess anzeigen". Dann den Prozess töten und nicht den Task. Das half früher immer.


----------



## Anonymaus (16. Jan 2009)

Habe ich auch versucht... hilft nichts.


----------



## Angel4585 (16. Jan 2009)

Was für ein Windows benutzt du?

Bei meinem taskmanager hab ich ne Registermappe Prozesse, da schnapp ich mir den prozess den ich beenden will und wähle - vorsicht kreativ - "Prozess beenden".
Ich hatte schonmal den Fall dass mehrere Prozesse verbunen sind, dann musst ich den Punkt "Prozesskette beenden" verwenden


----------



## Anonymaus (16. Jan 2009)

Sorry, aber genau darüber haben wir schon geschrieben.


----------



## Wildcard (16. Jan 2009)

Vermutlich läuft ein weiterer Prozess der den ersten neu startet falls er beendet wurde. Auch eine gängige Praxis bei Schadsoftware aller Art.


----------



## Anonymaus (17. Jan 2009)

Es ist garantiert keine Schadsoftware, es ist ein Programm (eine modulare Audiosoftware), welches vor 10 Jahren mal als Beta veröffentlicht, danach aber vom Entwickler eingestellt wurde, weil ihm der aktuelle Quelltext bei einem Festplattencrash abhanden gekommen ist. Seit dem wird das Programm durch die Community von Fans mit Hilfe von Patches und Addons am Leben gehalten.
Wenn man weiss wie, kann man recht gut damit Arbeiten, trotzdem passieren ab und zu crashes, nach denen man das Programm nicht mehr beenden kann.

Worum es mir hier allerdings ging ist die generelle Frage, wie und ob man unter Windows, wenn gar nichts mehr geht, einen Prozess weg bekommen kann, der einfach keine Signale mehr vom Betriebssystem annimmt, weil er halt hängt.
Wie man hier sieht, betrifft das Problem offensichtlich nicht nur Schadsoftware und ich dachte halt, dass man als Softwareentwickler manchmal mit sowas umgehen muss, auch wenn man bei Java durch die Architektur auf solche Probleme wohl eher seltener trifft.


----------



## Wildcard (17. Jan 2009)

Ich habe auch nicht gesagt das es sich um Schadsoftware handelt, sondern nur, das solches Verhalten oft bei Schadsoftware zu finden ist.
Wenn dir gesagt wird das der Prozess beendet wurde, würde ich erstmal davon ausgehen, dass es auch passiert ist, er aber sofort neu gestartet wird.


----------



## Anonymaus (18. Jan 2009)

Naja, ich habe mir angewöhnt, windows nicht all zu viel zu glauben.
Und wenn taskkill sagt "Prozess mit der PID <pid> wurde beendet", heisst das offensichtlich nicht mehr als "ich habe dem Prozess gesagt, dass er sich beenden soll", ob der Prozess diese Anweisung nun befolgt oder nicht...


----------



## Wildcard (18. Jan 2009)

Sagt wer?


----------



## Anonymaus (18. Jan 2009)

Naja, ist es nicht so, dass die Interaktion von Betriebssystem und Anwendung über Messages läuft?
Also ich weiss, dass es unter Linux so ist, dass kill normalerweise ein "SIGTERM" an den Prozess sendet und der Prozess beendet sich darauf hin, darf aber das Kommando ignorieren, zB solange der Nutzer noch gefragt werden muss, ob er die aktuelle Arbeit abspeichern will. Sollte der Prozess hängen, kommt er natürlich nicht mehr dazu, die finalen Aufgaben aus zu führen. Dafür gibt es "SIGKILL", was den Prozess einfach abwürgt, ob er noch reagiert oder nicht.
Nun dachte oder denke ich, dass es unter Windows ähnlich läuft. Das, was man im Taskmanager tun kann, ist das Windowsäquivalent zu "SIGTERM", nur taskkill /F tut etwas ähnliches wie "SIGKILL". 
Was taskkill aber nun ausgibt, ist eine andere Frage. Und so vermutete ich, dass einem zwar gesagt wird, dass der Prozess beendet wurde, es aber intern nicht mehr heisst als, dass dem Prozess das entsprechende Signal gesendet wurde.
Was ich nun suchte war, wie man unter Windows ein "SIGKILL" schickt, was kein Prozess ignorieren kann bzw. ob Windows so etwas überhaupt kennt. Offensichtlich funktioniert taskkill /F aber einwenig anders als KILL -SIGKILL unter Linux/Unix... keine Ahnung...


----------



## Wildcard (18. Jan 2009)

Soweit ich das von Windows richtig in Erinnerung habe, sagt es bescheid wenn der Prozess nicht auf den Terminierungsrequest antwortet. Da ja auch offensichtlich etwas passiert (du sagtest das Fenster verschwindet?), wäre mein erster Gedanke das es funktioniert hat, der Prozess aber wieder gestartet wird.
Schau vielleicht mal noch hier:
http://www.sysinternals.com/


----------

