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. 😃


Anmelden zum Antworten