ChildProcess in C++



  • Hallo,

    Ich brauche in C++ einen ChildProcess, um eine Applikation zu starten und mit ihr zu kommunizieren über ein I/0 Interface. Ich zitiere da mal die Funktionalität aus Nodejs ChildProcess ... die spawn Methode.
    "The spawn method spawns an external application in a new process and returns a streaming interface for I/O."
    Nun wollte ich mal fragen, ob da jemand was geignetes kennt bzw. da was weiterempfehlen kann ggfs. auch links zur Anwendung. Am liebsten wäre mir natürlich was aus der std oder qt (da ich das sowieso schon verwende).

    Auf folgendes bin ich schon mal gestoßen mir jedoch noch nicht sicher, ob es das ist, was ich benötige. Vielleicht habt ihr ja damit schon Erfahrungen gemacht.

    • fork() und pipe() aus unistd.h ... sah mir brauchbar aus. Allerdings nach einer lib nur für UNIX, daher Linux oder MacOs? Das würde mir nicht gefallen, hätte gerne was für alle Plattformen

    • QProcess von Qt. Das scheint mir auch in die richtige Richtung zu gehen. Man kann einen externen Prozess starten und es scheint read/write channels zu geben. Wäre also jetzt erstmal mein Favorit.

    Schon jemand damit Erfahrungen gemacht oder kann anderes empfehlen?

    Vielen Dank 🙂



  • Schau Dir die boost.process Bibliothek an. Diese stellt einen Wrapper zur Verfügung, aber es gibt keinen Weg das wirklich zu 100% umzusetzen, weil dies immer plattformabhängig ist. Windows ist nicht UNIX und UNIX ist nicht z/OS. Je nachdem was man braucht, muss man auf plattformabhängige Lösungen ausweichen.



  • Ja, das geht mit QProcess. Wenn du das eh schon gefunden hast, was ist dann noch deine Frage?



  • @Mechanics

    @Leon0402 sagte in ChildProcess in C++:

    Schon jemand damit Erfahrungen gemacht oder kann anderes empfehlen?

    *scnr*



  • Ich hatte QProcess mal verwendet vor längerer Zeit, allerdings in einem anderem Kontext, daher wusste ich das noch.
    Allgemein wollte ich einfach mal wissen, was es sonst noch gibt und was da so zu empfehlen ist. Oder gelten hier auch die Stackoverflow Regeln, dass man nicht nach einer Meinung fragen darf, sondern es eine klare Antwort geben muss?
    Da ich Qt sowieso schon in meiner Applikation habe und es (soweit ich weiß) auch plattformabhängig ist, werde ich damit mein Glück versuchen.
    boost.process sieht auch sehr interessant aus, denke aber wenn QProcess funktioniert ist das vlt. die bessere Option, da ich dann nicht auch noch boost einbinden muss.



  • @Leon0402 sagte in ChildProcess in C++:

    Da ich Qt sowieso schon in meiner Applikation habe

    Das ist hier der am ehesten relevante Punkt. Nach Meinungen darfst du gern fragen, aber das ist zu unwichtig, um eine Meinung darüber zu haben, finde ich. So schwierig ist sowas nicht, das hatten wir auch schon mal selber implementiert. Ist aber auch nicht ganz trivial, grad unter Linux gibts evtl. Randbedingungen, die man beachten muss. Wenn man sich das sparen kann, nimmt man eine fertige Bibliothek.
    QProcess hab ich schon oft verwendet, und das funktioniert. Wir verwenden in den letzten Jahren aber nur noch Windows, kann dir also nicht sagen, wie gut das unter Linux tut. Von boost erwarte ich auch, dass es funktioniert. Also dürfte das entscheidende sein, dass du etwas nimmst, was du eh schon verwendest, und nicht wegen so einer Kleinigkeit eine neue Bibliothek integrierst.



  • Ich würde an deiner Stelle bei QT bleiben und QProcess nutzen, weil:

    1. Du bist mit QT vertraut
    2. QProcess ist ein mächtiges Schwert!

    Für mich gilt:
    Wenn ich ein Framework schon nutze und es Funktionalität anbietet, die ich brauche und diese Funktionalität einigermaßen gescheit benutzbar ist (und tut was ich brauche), dann nehme ich das was schon da ist, anstatt in anderen Bibliotheken zu wühlen 😉


Anmelden zum Antworten