Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

1

23.04.2011, 04:10

Prüfen ob eine Anwendung reagiert

Guten Tag.

Ich bin gerade dabei einen Restarter zu basteln für Programme die öfters mal abstürzen bzw. nicht mehr richtig reagieren.

Ich bräuchte daher irgendeine eine Funktion die ein anderes Programm überprüft ob dieses noch läuft und reagiert. Daher reicht es mir nicht einfach zu schauen ob die Anwendung im Task ist. Sollte die andere Anwendung also "frezzen" (auch ohne Windows-Fehlermeldung) dann sollte die Funktion auch das bemerken.

Ein Script fürs killen vom Task hab ich schon (ProzessID per Anwendungsname). Bräuchte also außerdem noch ne Funktion um eine Anwendung zu starten. Vielleicht kann man das Prüfen und Programmstart kombinieren.
Das alles natürlich in C++ :)

Danke schonmal an alle Antworten :>

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

23.04.2011, 06:57

Interessant für Dich ist vielleicht das hier:
http://de.wikipedia.org/wiki/Halteproblem

Allerdings kann das Problem eventuell in gewissen Fällen praktisch lösbar sein für Deinen Zweck, aber woher entscheidet Deine Anwendung, ob ein Programm rechtmäßig auf 100% CPU ohne Reaktion läuft oder ob es sich aufgehängt hat?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Teiby

Frischling

  • »Teiby« ist der Autor dieses Themas

Beiträge: 42

Beruf: Ausbildung

  • Private Nachricht senden

3

23.04.2011, 08:51

Es handelt sich hierbei um einen Emulator der OpenSource ist. Und dort können eben viele dran rumspielen und das ganze Ding ist quasi dauernt in der Beta und daher können eben Abstürze oft passieren und ich möcht das Programm auch wieder automatisch neustarten ohne es manuell beenden zu müssen und wieder neu zu starten.

Gibst da den keine Funktion die das Programm anstupsen kann und das Programm ne kleine Rückmeldung gibt das es noch läuft? Das Programm kann auch RA und SOAP. Vielleicht kann man es auch damit prüfen?

Zitat

woher entscheidet Deine Anwendung, ob ein Programm rechtmäßig auf 100% CPU ohne Reaktion läuft oder ob es sich aufgehängt hat?
Man könnte diese Prüfung ja mehrmals machen. Wenn das Programm nicht reagiert, könnte man 3 mal alle 3 Sekunden nochmal prüfen und wenns dann nicht reagiert, dann ist es abgestürzt und der Task wird gekillt und neugestartet.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Teiby« (23.04.2011, 09:10)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

23.04.2011, 10:16

Das mit dem 3mal alle 3 Sekunden prüfen... woher will man da wissen, dass das Programm nicht gerade hängt, weil z.B. WinRar eine große Datei entpackt - dabei (selbst bei Dual-Core) hängen sich viele Programme bei mir zeitweise auf, bzw. reagieren nicht (Minuten-lang manchmal, je nach File), weil der BUS durch WinRar komplett vereinnahmt wird. Klar, sowas sind definitiv Sonderfälle, aber das zeigt sehr gut, dass man von außen automatisch nur sehr schwer sagen kann, warum ein Programm nicht reagiert und ob sich das Programm aufgehängt hat oder nur durch andere Faktoren temporär blockiert ist.
Das gleiche Problem hat man bei jeder anderen Art der Überprüfung durch Status-Codes oder Rückmeldungen durch das observierte Programm selbst - es kann mal hängen durch äußere Faktoren, hat sich aber noch nicht aufgehängt.
Alle Situationen kann man damit also wohl nicht korrekt erkennen und die Detektierung wäre immer etwas übereifrig. Umsetzen ließe es sich unter dem Wissen dieses Problems natürlich trotzdem durch aktive Status-Codes/Rückmeldungen via Pipe oder local-network-connection.

Definitiv besser wäre meiner Meinung nach das Fixen des eigentlichen Problems, statt so einen dirty Hack rundrum zu bauen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

23.04.2011, 10:50

Könnte hilfreich sein: http://msdn.microsoft.com/en-us/library/ms644952.aspx

Natürlich wärs trotzdem besser einfach vernünftige Software zu benutzen anstatt solche Hacks zu bauen ;)

Werbeanzeige