fork, execl
-
Ich habe in meinem Programm A mit fork() einen Child-Prozess erzeugt und starte dann mit execl() ein anderes Programm B. Das klappt soweit sehr gut.
Nun muss ich aber erkennen, ob sich Programm B beendet hat, und dann dieses wieder starten. Wie realisiere ich dass?
Der Father-Prozess muss eigenständig weiterlaufen, d.h. wait() kann ich nicht verwenden. Pollen wäre möglich, aber wie prüfe ich, ob der Child-Prozess noch läuft?Danke für eure Tipps.
-
Du könntest SIGCHLD abfangen und dann testen ob das Programm beendet wurde (mittels man: wait(2))
Unter *BSD könntest du den Prozess mittels kqueue überwachen. Unter Linux könntest du /proc überwachen. Eine weitere Lösung wäre zB eine pipe zu erzeugen zwischen den Prozessen und im Elternprozess überwachst du eben ob die pipe geschlossen wurde.
oder du erzeugst zwei Prozesse:
fork Child: fork <- Child: execl | Parent: wait(); loop - Parent: ...
Was besseres fällt mir auf die Schnelle nicht ein
-
Würde einfach einen signal handler für SIGCHLD installieren.
-
Danke, für die Antworten. Ich denke das mit den zwei Prozessen ist fast der einfachste Weg, werde ich versuchen.