Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Wieso kann Windows hängende Prozesse beenden und ich nicht? (https://www.delphipraxis.net/161232-wieso-kann-windows-haengende-prozesse-beenden-und-ich-nicht.html)

Iwo Asnet 23. Jun 2011 15:02

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?

mkinzler 23. Jun 2011 15:06

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
 
Ist die Anwendung von dir?

user0815 23. Jun 2011 15:06

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
 
das Thema gab es schon mal: http://www.delphipraxis.net/156073-k...prozesses.html

Iwo Asnet 23. Jun 2011 15:18

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.

ele 23. Jun 2011 16:38

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.

WM_CLOSE 23. Jun 2011 20:40

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)

bit4bit 23. Jun 2011 20:44

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" ).

sx2008 23. Jun 2011 22:55

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 NtTerminateProcess bzw. ZwTerminateProcess, die möglicherweise härter als TerminateProcess agieren.

FredlFesl 25. Jun 2011 07:55

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?
 
Hier ein Tool, das das kann:
Klick!

Edit: und dann gibt es noch das DOS-Kommando "TaskKill", zumindest bei mir. (Vista)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz