Seite 1 von 1
RunProgram bei OnError
Verfasst: 07.03.2025 16:50
von stevie1401
das Funktioniert wunderbar:
Code: Alles auswählen
i=RunProgram("gnome-terminal"," --execute ./meinProgramm","",#PB_Program_Open)
Nun möchte ich aber, wenn mein Programm ( warum auch immer) abstürzt, dass es automatisch wieder startet.
Deshalb habe ich es in OnErrorCall(@ErrorHandler()) eingefügt.
In der ErrorHandler-Procedure wird das Programm angeblich auch aufgerufen, wenn ich einen Fehler simuliere, tatsächlich ist es aber nicht zu finden.
Wird es sofort wieder geschlossen?
Re: RunProgram bei OnError
Verfasst: 07.03.2025 19:27
von jogo
wie meinst du, es ist nicht zu finden? Wenn es abstürzt, läuft es natürlich nicht mehr und ist nicht zu finden.

Du willst ja nur feststellen, ob es abstürzt, um es erneut zu starten.
du könntest dein Program auch direkt mit RunProgram() starten und dann mit IsProgram() und ProgramRunning() prüfen, ob es läuft. Mit KillProgram() könntest du es "gewaltsam" beenden.
Mit WriteProgramString() könntest du dem Programm auch Kommandos schicken oder auch mit AvailableProgramOutput() und ReadProgramString() Infos vom Programm empfangen. So weißt du immer, wie es dein Programm gerade "geht".
Mit den OnError Funktionen kenn ich mich nicht aus.
Aber die startest ja eigentlich das gnome-terminal, und würdest dafür die OnError-Meldung erhalten, falls mit demTerminal was nicht stimmt?
Re: RunProgram bei OnError
Verfasst: 08.03.2025 00:16
von Macros
Unter Linux haben Programme eine Hierarchie. Wenn dein Programm geschlossen wird oder abstürzt, werden auch davon aufgerufene Programme beendet.
Simple Demonstration:
Es gibt Mittel Programme aus der Hierarchie zu lösen. So z.B. das Programm "nohup"
Ein Beispielcode:
Code: Alles auswählen
programm$="mousepad"
parameter$=~"-c \"nohup "+programm$+~" &>/dev/null &\""
If RunProgram("/bin/sh", parameter$, "")
Debug programm$+" gestartet und unabhängig gemacht"
Debug "Parameter waren : "+Chr(9)+parameter$
Else
Debug programm$+" nicht gefunden/konnte nicht gestartet werden, anderes Programm einsetzen, Pfad prüfen, Rechte prüfen, ..."
EndIf
; Mousepad sollte weiter im Hintergrund laufen
End
Das sollte dann auch in deiner OnError funktionieren, das hab ich auf die Schnelle nicht getestet.
(Hinweis: Es erscheint mir ein schlechter Programmierstil, bei einem Fehler das eigene Programm neuzustarten, von wenigen Ausnahmen wie einem Webserver mal abgesehen. Generell sollte man eher untersuchen was den Fehler verursacht hat und beenden, damit keine Folgefehler entstehen)
Warum nicht einfach
?
Weil nohup sonst eine Datei nohub.out im aktuellen Verzeichnis erzeugt und dort die Programmausgabe hineinschreibt, dass hab ich schnell mit einem Shell redirect behoben. Es mag bessere Programme für die Aufgabe geben, nohup war mir bekannt und ist praktisch immer vorhanden. Wenn du eine bessere Lösung findest, poste sie gerne hier.
Re: RunProgram bei OnError
Verfasst: 11.03.2025 19:39
von stevie1401
Erst einmal vielen Dank, ich werde es testen.
Und du hast Recht, es ist ein schlechter Programmierstil ein abgestürztes Programm neu aufzurufen.
Aber es ist tatsächlich ein Webserver und ich finde den Fehler einfach nicht.
Re: RunProgram bei OnError
Verfasst: 12.03.2025 10:14
von stevie1401
wenn ich meinem Programm mit WriteProgramString() etwas schreibe, wie liest mein Programm dann das Geschriebene? Anscheinend nicht mit ReadProgramString()