AW: Prüfen ob Programm abgestürzt ist
Zitat:
|
AW: Prüfen ob Programm abgestürzt ist
"Abstürzen" ist natürlich so eine Sache.
Eine Anwendung kann den Dienst versagen, aber ganz brav auf sämtliche Messages reagieren. Trotzdem ist sie aus Sicht des Anwenders (andere App oder Benutzer) 'abgeschmiert'. Ich finde die Aussage von taveuni auch etwas voreilig, zumal die Begründung Zitat:
Die imho einzige Möglichkeit, einen Absturz zu erkennen, wäre ein periodischer Integrationstest, d.h. die Anwendung prüft selbst, ob die relevanten Komponenten noch funktionstüchtig sind und meldet das Ergebnis an einen Wächter. Bleibt die Meldung aus (oder ist eben negativ), wird entsprechend reagiert. |
AW: Prüfen ob Programm abgestürzt ist
Es wäre vllt. günstig erst einmal "abgeschmiert","Hängt",... zu definieren?
Aus meiner Erfahrung gibt es für "hängende" Anwendungen meist folgende Gründe: a) Datenmenge einer Abfrage ist groß. Besonders Access schafft es gut sich tot zu stellen. Ebenso bei Abfragen wie
Code:
brauchen Server einige Zeit um zu bemerken, daß die Datenmenge zu groß ist.
select irgendwas from table1,table2
b) Ein Programm läßt ein Fenster aufpoppen, nur leider nicht "onTop" sondern "onBottom" c) Eine Endlosschleife weil diese Datenkonstellation ja "nie" auftreten kann. In allen diesen Fällen arbeitet das Programm "as designed", nur erwartet der Benutzer dies eigentlich nicht. Gruß K-H |
AW: Prüfen ob Programm abgestürzt ist
Man muss doch nur herausfinden wie Windows das selbst macht wenn ein Process hängt.
Dafür braucht man keinen Nobelpreis. Denke das ist der Ansatz den auch Furtbichler verfolgt mit seinem Schnipsel. gruss |
AW: Prüfen ob Programm abgestürzt ist
Zitat:
(Es gibt keine praktikable Möglichkeit festzustellen, ob ein Programm in einer (nicht gewollten) Endlosschleife hängt. Man kann aber zum Beispiel feststellen, ob es noch auf Nachrichten reagiert.) Wenn man jetzt stark in einander integrierte hochverfügbare Anwendungen schreibt, kann man sicher noch andere Fortschritts-/Lebendigkeitseigenschaften überwachen. Wenn iDope das wollen würde, hätte er vermutlich andere Fragen gestellt. |
AW: Prüfen ob Programm abgestürzt ist
Zitat:
Winodws meldet das aber nur aufgrund der Tatsache, ob das Programm seine Messages abarbeitet. Bei single threaded passiert das eben nicht, obwohl das Programm z.B. nur auf die Antwort eines DB-Servers wartet oder selbst noch am Rechnen ist. Bei multithreaded ist es dann genau umgekehrt.
Code:
Wie entscheidest du ("von außen"), ob die Bedingung irgendwann erfüllt sein wird?
loop
TuWas; until IrgendEineBedingung; |
AW: Prüfen ob Programm abgestürzt ist
Der Umkehrschluss ist natürlich der, das man anfängt, diese Dinge in einen Thread auszulagern, eben damit Windows nicht mehr meckert,übrigens zu Recht: Es kommt von der Anwendung ja wirklich keine Rückmeldung.
Wenn man auf eine Datenbankabfrage wartet, dann muss man die eben auch abbrechen können. Wenn die Komponente das nicht hergibt, muss man eben eine andere nehmen. |
AW: Prüfen ob Programm abgestürzt ist
Nur hilft das überhaupt nicht, wenn man auf das zu überwachende Programm keinen Einfluss hat. Also im Sinne von selbst daran rumprogrammieren.
Fazit ist doch: Man kann gewisse Anzeichen von aussen als Hinweis interpretieren, dass ein Programm nicht mehr so läuft, wie es gedacht ist. Man kann damit allerdings auch sehr daneben liegen. Ob das so ist, ist von der Art und Weise abhängig, wie das zu überwachende Programm geschrieben ist. Eine allgemeingültige Lösung gibt es schlicht und ergreifend nicht. Und selbst wenn man das zu überwachende Programm selbst in der Hand hat, ist es noch immer recht schwierig. (Was bringt einem ein Life-Beat-Thread der einem Überwacher über z.B. TCP sein Vorhandensein mitteilt, wenn der eigentliche Arbeitsthread in einer Endlosschleife hängt z.B.? Solche Dinge müssten sehr gut durchdacht werden.) Die Lösung des Problems ist hier daher davon abhängig, wie (und ob) man dem zu überwachenden Programm anerkennen kann, dass es gegen eine Wand gelaufen ist. Und zudem, ob dies aus einem fremden Prozess mit API Mitteln überhaupt ersichtlich werden kann. Ohne sehr genaue Kenntnis des Programms kann man daher imho nur ähnlich naive Methoden nutzen wie es Windows selbst macht, ohne jegliche Garantien auf Korrektheit der Absturzerkennung. |
AW: Prüfen ob Programm abgestürzt ist
Zitat:
Wenn hingegen ein Programm länger läuft und dabei korrekterweise noch auf die GUI reagiert (Threads), erkennt Windows auch nicht, wenn der Vorgang an sich "abstürzt". Eben weil eine solche Absturzerkennung nicht möglich ist. Ein Hängen im Sinne von nicht reagieren kann man jedenfalls einfach über die glaube ich schon genannte API Funktion herausfinden. Damit erkennt man das gleiche wie Windows selbst auch anzeigt. Wobei ich das mittlerweile nur noch bei wenigen kleineren Softwaretools als Problem habe. Die größeren Programme sind da besser und reagieren auch bei längeren Vorgängen noch. |
AW: Prüfen ob Programm abgestürzt ist
Hallo,
Da es ein fremdes Programm ist, was zusätzlich auch noch im Netz läuft, definiere ich "abgestürzt" einfach mit "erfüllt seine Funktion nicht mehr so wie erwartet". Das prüfe ich 5mal im Abstand von 1 Minute und schieße es dann ab. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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