![]() |
Wieso kann Windows hängende Prozesse beenden und ich nicht?
Hallo,
Wir haben hier eine blöde Applikation, die ab und an in einer Endlosschleife hängt, genauergesagt wartet sie auf eine Semaphore, die aber nie freigegeben wird. Wenn man so einen Prozess per Taskmanager killen will, klappt das nicht. Man muss 10 Minuten warten, dann verschwindet die Sau von selbst. Oder man beendet die Windows-Session. Das geht auch. Mein Trick ist bisher folgender: 1. NOTEPAD öffnen, irgendwas eintippen. 2. Benutzer abmelden. 3. NOTEPAD fragt, ob die Änderungen gespeichert werden sollen. 4. In der Zwischenzeit wird die hängende App von Windows gekillt. 5. Ich antworte auf die Frage (3) mit ABBRUCH. 6. Fertig Nachteil: AV-Programme und sonstige user-Dienste sind auch flöten. Meine Frage lautet: Wie bekommt Windows es hin, beim herunterfahren einen Prozess zu killen, den ich nicht killen kann? |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Ist die Anwendung von dir?
|
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
das Thema gab es schon mal:
![]() |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Nee, glaube nicht. Dort wird mit TerminateProcess gearbeitet.
Was ruft denn der Taskmanager auf, wenn man dort den Prozess beenden will? Doch wohl 'TerminateProcess', und genau DAS klappt bzw. reicht ja nicht. Edit: Da hat ja einer das gleiche Problem, in dem Thread und den gleichen Trick gefunden :stupid: Edit nochmal: @mkinzler: Jupp, wir dürfen sie aber nicht austauschen... Weil ja dann die Anwendung hängenbleibt... (Klassischer Knieschuss). Daher meine Idee: Erst mit Spezialtrick abschießen, dann austauschen und Ruhe im Karton. |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Achte darauf, dass du im Task-Manager die Anwendung im Prozess-Tab beendest und nicht im Anwendungs-Tab.
|
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Reagiert die Anwendung vllt nur auf die Messages WM_QUERYENDSESSION & Co?
Die kann man auch selber senden. (Reine Spekulation) |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Probier doch mal den Process Explorer von Sysinternals ( mittlerweile gehört's Microsoft )!
Hat mir bisher noch immer alles abgeschossen ( "Kill Process" oder "Kill Process Tree" ). |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Zwischen der API-Funktion TerminateProcess und dem Code, der beim Herunterfahren/Neustart von Windows ausgeführt wird gibt es sicher einen Unterschied.
Folgende Überlegungen sind rein spekulativ aber die Logik sagt mir, dass es so ablaufen muss Wenn Windows heruntergefahren wird, dann bekommen die Anwendungen eine freundliche WM_CLOSE Message. Sollte eine Anwendung darauf nicht innerhalb einer best. Zeit reagieren, dann kommt wohl das härtere TerminateProcess zum Zuge. Sollte TerminateProcess nichts bewirken dann hat Windows sicher noch einen "Emergency" Mechanismus in der Hinterhand. Wenn Windows sowieso runtergefahren wird, dann ist es doch egal ob die reservierten Resourcen (Speicher, File-Handles,...) einer Anwendung wirklich freigegeben werden. Windows braucht dann nur alle Threads anhalten und alle Handles gewaltsam schliesen und so tun als ob der Prozess gekillt wäre. Hätte Windows diesen Notmechanismus nicht, gäbe es öfters mal Blockaden beim Herunterfahren wie man das z.B. noch von Windows 95/98/ME kennt. Und dann gibt es auch noch die undokumentierte API-Funktion ![]() |
AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
Hier ein Tool, das das kann:
![]() Edit: und dann gibt es noch das DOS-Kommando "TaskKill", zumindest bei mir. (Vista) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz