Prozessüberwachung



  • Tut mir leid, bin nebenher sehr viel am machen 😞
    Also im Endeffekt so.

    Prozessüberwacher startet Server und erstellt leere Datei.
    Server überschreibt am Anfang der Schleife immer eine neue Timestamp in die Datei.
    Prozessüberwacher checkt jede Minute ob die Timestamp älter als XY Sekunden ist.

    Falls ja, dann killen und neustarten.

    Wäre es effektiv, diese Methode mittels der Timestamp?



  • Und jetzt nochmal einen Schritt zurücktreten: Was genau willst du mit dieser Konstruktion erreichen? (das Ziel, nicht der dafür verwendete Weg)

    Wenn es dir nur darum geht festzustellen, daß der Server noch korrekt läuft, würde ich eher mit Betriebssystem-Mitteln wie Nachrichten oder Events arbeiten.



  • Danke

    Ich möchte, schauen, ob der Prozess läuft oder nicht.

    Events etc. hab ich schon vieles bei Google gefunden. Aber ich würde bzw. sollte es möglichst "klein" halten.

    Es ist ja nur die Frage, ob die Vorstellung, die ich habe, sehr Fehleranfällig ist oder an sich kein Problem darstellt.

    Ich soll so wenig Betriebssystem-Mittel nutzen wie es geht und doch eher nativ arbeiten.



  • zuckerlie schrieb:

    Danke

    Ich möchte, schauen, ob der Prozess läuft oder nicht.

    Events etc. hab ich schon vieles bei Google gefunden. Aber ich würde bzw. sollte es möglichst "klein" halten.

    Es ist ja nur die Frage, ob die Vorstellung, die ich habe, sehr Fehleranfällig ist oder an sich kein Problem darstellt.

    Benutzt der überwachte Prozess Threads? Was passiert, wenn ein Thread stirbt, aber der Prozess noch lebt? Was tut Deiner Überwachung dann?



  • Nein, er nutzt keine Threats. Das sollte ich nämlich auch vermeiden.



  • Also eine Art Watchdog, der aufpasst, dass der Serverprozess noch läuft und ihn ggf. neu startet?



  • Fehleranfällig vermutlich nicht, aber umständlich.

    Ich hab' selber schonmal sowas fabriziert, wobei aber noch dazukam, daß die Beteiligten unabhängig voneinander gestartet wurden und eventuell sogar auf verschiedenen Rechnern laufen können (außerdem sind sie nicht in C/C++ geschrieben, so daß einige direktere Methoden nicht möglich waren).

    Wenn es dir nur darum geht, ob der Server noch existiert, könnte es Probleme geben, wenn er längere Zeit (>1 Min) im Inneren der Schleife unterwegs ist. Aber da würde ich mir einfach das Prozess-Handle auf den erzeugten Server-Prozess merken und per WaitForSingleObject() prüfen, ob er noch existiert.
    Wenn du wirklich sicherstellen willst, daß er in noch sinnvolle Arbeit verrichtet (im Sinne von "Durchlauf der Hauptschleife"), muß der Server regelmäßig eine Mitteilung senden, daß er noch da ist - da wäre dein Ansatz sogar eine systemunabhängige Lösung (allerdings nicht unbedingt die schnellste wegen der Festplattenzugriffe).



  • Alles klar. Vielen Dank!



  • Ohne Timestamp:
    Überwacher erstellt leere Datei und wartet (sleep), prüft dann, ob Datei noch vorhanden ist, wenn ja, Prozessneustart.

    Prozess löscht die Datei in seiner Arbeitsschleife immer wieder.



  • Mit WinApi-Mutexobjekten geht das ohne Datei besser. Siehe CreateMutex(). 🙄



  • Siehe:

    zuckerlie schrieb:

    Ich soll so wenig Betriebssystem-Mittel nutzen wie es geht


Anmelden zum Antworten