AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Wieso kann Windows hängende Prozesse beenden und ich nicht?

Wieso kann Windows hängende Prozesse beenden und ich nicht?

Ein Thema von Iwo Asnet · begonnen am 23. Jun 2011 · letzter Beitrag vom 25. Jun 2011
Antwort Antwort
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 15:02
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 15:06
Ist die Anwendung von dir?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 15:06
das Thema gab es schon mal: http://www.delphipraxis.net/156073-k...prozesses.html
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#4

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 15:18
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

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.

Geändert von Iwo Asnet (23. Jun 2011 um 15:22 Uhr)
  Mit Zitat antworten Zitat
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 16:38
Achte darauf, dass du im Task-Manager die Anwendung im Prozess-Tab beendest und nicht im Anwendungs-Tab.
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#6

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 20:40
Reagiert die Anwendung vllt nur auf die Messages WM_QUERYENDSESSION & Co?
Die kann man auch selber senden. (Reine Spekulation)
Delphi programming
  Mit Zitat antworten Zitat
bit4bit

Registriert seit: 14. Jun 2006
Ort: Köln
25 Beiträge
 
#7

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 20:44
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" ).
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 23. Jun 2011, 22:55
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.
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#9

AW: Wieso kann Windows hängende Prozesse beenden und ich nicht?

  Alt 25. Jun 2011, 07:55
Hier ein Tool, das das kann:
Klick!

Edit: und dann gibt es noch das DOS-Kommando "TaskKill", zumindest bei mir. (Vista)
Das Bild hängt schief.

Geändert von FredlFesl (25. Jun 2011 um 07:58 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 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