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/)
-   -   Delphi abgestürzten prozess erkennen ? (https://www.delphipraxis.net/2998-abgestuerzten-prozess-erkennen.html)

supermuckl 17. Feb 2003 17:45


abgestürzten prozess erkennen ?
 
wie krieg ich raus ob ein prozess sich noch meldet ( nicht abgestürzt ist und rückmeldung gibt ) oder ob er nicht mehr reagiert und z.b. in einer endlosschleife hängt oder einfach abgestürzt ist ?

das handle könnte ich raus bekommen... aber wie krieg ich raus ob es noch reagiert ?

und wie isses mit einem service prozess? gehts da auch ? sind alle prozesse gleich zu behandeln bei sowas?

supermuckl 19. Feb 2003 17:24

kann mir also keiner ne antwort geben ?
krass :/
soll doch garnicht so ne schwierige frage sein :)
hat echt keiner ne ahnung? oder nen ansatz wo ich suchen könnte ?!?!
:bouncing4:

CalganX 19. Feb 2003 17:52

So einfach ist das auch nicht, aber ich hatte da eine Idee:
Du beoabachtest einen Prozess, und wenn sich in einer bestimmten Zeitspanne sich nichts tut, dann könnte der Prozess abgestürzt sein.

Allerdings kann ich dir nicht sagen, wie das geht. :(

Chris

supermuckl 19. Feb 2003 17:55

klar... aber "was" beobachte ich ;)
kann ja nix senden und warten das was zurück kommt oder ?!?!?!
DDE ? ole ? ka.. kann auf jeden fall nix in das zu überwachende proggi einbauen

RomanK 19. Feb 2003 17:59

Hoi.
Also du könntest mal im PSDK nach Sendmessage suchen, wenn du das ned hasch dann auch http://msdn.mircosoft.com, vielleicht gibts da nen Message die nen Replie erfordert oder so...

Motzi 20. Feb 2003 15:00

Schau dir mal die Doku zu SendMessageTimeOut() an..

supermuckl 20. Feb 2003 17:50

ja das wär genau richtig.. bloss weis ich net was ich als message nehmen soll die ich da sende und auf reply timeout überprüfe.
müsste irgend was sein wo wie ein ping wirkt *g*
also das programm ist warscheinlich nur über die processid zu finden..
es ist ein dienst ( service )
:roll:

Motzi 20. Feb 2003 17:56

Als Message könnte WM_NULL herhalten.. aber nur mit der ProcessID wirst du Probleme haben.. ich schau mal ob ich was finden kann!

CalganX 20. Feb 2003 17:56

Vielleicht hast du ja bereits hier nachgesehen. Zumindest findest du da noch was genaueres.
Dort wird geschrieben, dass eine genaue Nachricht ist. Ich würde es am Anfang mal versuchen ganz ohne Nachricht zu versenden...

Chris

PS: Wenn du das in's OnCreate schreibst (wenn du VCL programmierst), dann gehen die Ladezeiten hoch!!! Nur als Hinweis. ;)

CalganX 20. Feb 2003 17:58

@Motzi: die ProcessID ist kein Problem, wenn man einen ProcViewer schreibt (Sorry, Assarbad). Wenn du ein Beispiel brauchst, findest du auf http://www.assarbad.org ein nonVCL-Programm (oder doch VCL... :?).

Chris

supermuckl 20. Feb 2003 18:22

jo also die processid krieg ich bestimmt anhand des service namens raus irgendwie.. getpidbyname und dann hab ich die pid und dann daraus das handle bestimmen.. so irgendwie stell ich mir das vor.. und wenn ich das handle des services hab kann ich ja die abfrage starten ob das ding noch lebt

Christian Seehase 22. Feb 2003 01:20

Moin Supermuckl,

auch wenn Du alle erforderlichen Daten hast bleibt noch das Problem, wonach Du entscheiden willst, ob der Prozess nun abgestürzt ist, oder nicht.
SendMessageTimeOut könnte da zwar helfen, aber man sollte dann auch die Geschwindigkeit des Rechners mit in die TimeOutzeit einrechnen, ansonsten würde ja auf einem langsamen Rechner der Prozess eher als "aufgehängt" gelten, als auf einem schnellen.

Luckie 22. Feb 2003 03:32

Wenn du die ProzessID hast, könnte man auch mit WaitForSingleObject da ran gehen.

Motzi 22. Feb 2003 16:33

Zitat:

Zitat von Chakotay1308
@Motzi: die ProcessID ist kein Problem, wenn man einen ProcViewer schreibt (Sorry, Assarbad). Wenn du ein Beispiel brauchst, findest du auf http://www.assarbad.org ein nonVCL-Programm (oder doch VCL... :?).

Chris

Ich hab schon meinen eigenen ProcViewer (www.x-spy.net) ;), aber was ich gemeint hab war, dass er nur mit der ProcID und ohne Fenster-Handle keine Möglichkeit hat SendMessageTimeOut einzusetzen. Und falls die Zielplattform eine NT-Version ist, und das Zielprog ein Service, dann könnte es überhaupt ein Problem mit den Messages geben, da die Fenster des Services (sofern es überhaupt welche hat) möglicherweise zu einer anderen WindowStation gehören.

@Luckie: gehtt ein Prozess-Objekt nicht erst dann in den signalisierten Zustand über, sobald der Prozess beendet ist, also wenn der letzte Thread des Prozesses terminiert ist (zumindest hab ich das jetzt so im Gedächtnis)?

Luckie 22. Feb 2003 16:36

Zitat:

Zitat von Motzi
@Luckie: gehtt ein Prozess-Objekt nicht erst dann in den signalisierten Zustand über, sobald der Prozess beendet ist, also wenn der letzte Thread des Prozesses terminiert ist (zumindest hab ich das jetzt so im Gedächtnis)?

Stimmt, das hatte ich übersehen. Da hatte ich mal wieder schneller getippt, als ich nachgedacht habe. :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 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