AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi WatchDog, Feststellen, das (fremdes Programm) hängt
Thema durchsuchen
Ansicht
Themen-Optionen

WatchDog, Feststellen, das (fremdes Programm) hängt

Ein Thema von hoika · begonnen am 21. Okt 2008 · letzter Beitrag vom 21. Okt 2008
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:34
Hallo,

ein Programm A von mir läuft den ganzen Tag (kein Dienst) und liest Daten aus einem externen Gerät aus.
Ein Programm B checkt (über geplante Vorgänge) permanent,
ob Programm A noch läuft und startet es bei Bedarf neu.
(Der Test läuft über einen Mutex, den Programm A erzeugt).

Jetzt kann (soll aber nicht ) es vorkommen,
das Programm A "hängt".
Die Meldung von Windows ist ja dann "Das Programm XXX reagiert nicht mehr"

Kann ich sowas selber feststellen, und es dann abschiessen ?
Gibt es dafür einen API-Befehl ?


Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:40
Hab ich mal irgendwo ausgeschnipselt, aber nie benutzt:
Delphi-Quellcode:
// For Win NT/2000/XP
function IsAppRespondigNT(wnd: HWND): Boolean;
type
  TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall;
var
  hKernel: THandle;
  IsHungAppWindow: TIsHungAppWindow;
begin
  Result := True;
  hKernel := GetModuleHandle('user32.dll');
  if (hKernel > 0) then
  begin
    @IsHungAppWindow := GetProcAddress(hKernel, 'IsHungAppWindow');
    if Assigned(IsHungAppWindow) then
    begin
      Result := not IsHungAppWindow(wnd);
    end;
  end;
end;

function IsAppRespondig(Wnd: HWND): Boolean;
begin
 if not IsWindow(Wnd) then
 begin
   ShowMessage('Incorrect window handle');
 Exit;
 end;
 if Win32Platform = VER_PLATFORM_WIN32_NT then
   Result := IsAppRespondigNT(wnd)
 else
   Result := IsAppRespondigNT(GetWindowThreadProcessId(wnd,nil));
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:44
Ist aber nicht unbedingt zuverlässig. Wenn eine Applikation mal eben bisschen was zu "rödeln" hat, dann verarbeitet sie halt grad keine Messages und schon ist sie eine "Hung Application". Das ist halt ein klassisches Problem der Informatik: Von aussen Feststellen, ob eine beliebige Anwendung auch noch macht, was sie machen soll...

Aber ein Hinweis ist es auf jeden Fall.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:49
Man könnte noch die Nachricht MSDN-Library durchsuchenWM_NULL mit MSDN-Library durchsuchenSendMessageTimeout an das Fenster senden. das ist, glaube ich, auch die Methode die vom Taskmanager verwendet wird, um festzustellen, ob ein Fenster noch reagiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:52
Das stimmt. Aber kann kann doch in allen Schleifen ab und an ein 'Application.ProcessMessages' aufrufen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 09:56
Entweder das oder einen separaten Thread benutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#7

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 10:11
Nur nützt ein Application.ProcessMessages in einer Endlosschleife auch nicht wirklich viel
Das Programm hängt eigentlich, aber für Windows sieht es intakt aus...

Sherlock
Oliver
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 10:13
Zitat von Sherlock:
Nur nützt ein Application.ProcessMessages in einer Endlosschleife auch nicht wirklich viel
hö hö. Es gibt bei mir keine Endlosschleife.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 10:27
Hallo,

Vorschlag für eine "halb manuelle" Prüfung:
An definierten Stellen des zu überprüfenden Programmes eine Textdatei mit Zeitstempel erstellen und die Änderung dieser Datei mit dem Überwachungsprogramm prüfen.

Bei einem Kunden mit aufwändigen Datenbankapplikationen (unter AIX) haben wir die Programme an definierten Stellen in eine Datenbanktabelle den Programmnamen, einen Zeitstempel und den gerade auszuführenden Programmschritt schreiben lassen. Dadurch konnten wir in dieser Tabelle immer sehen, welcher Job gerade was macht und an welcher Stelle er ggfls. hängengeblieben ist. Diese Überprüfung erfolgte mittels eines Programmes, dass den Admin ggfls. bei Langläufern informierte. Hier braucht man ggfls. Erfahrungswerte, wie lange ein Job wofür brauchen darf, und ab wann eine Warnung zu senden ist.

Dies läßt sich sicherlich auch auf einen automatischen Programmabbruch und Neustart erweitern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: WatchDog, Feststellen, das (fremdes Programm) hängt

  Alt 21. Okt 2008, 10:38
Hallo,

danke an alle für die vielen Antworten !

Die Sache mit dem TimeStamp in die DB schreiben,
hatte ich mir auch schon überlegt.

Donnerstag ist Abgabe, *schnell tipper*


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:40 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