Programmaufruf mit popen()/system()



  • Hallo Leute,

    ich habe folgendes vor: Ich starte über eine Konsole Programm 1.
    Dieses soll irgendwann mal Programm 2 starten. Jedoch soll das Prgramm bzw. die Ausgabe dessen in einem neuem Fenster/Konsole(mir egal) laufen.

    Das Problem mit system() ist, das die Ausgabe des 2ten Prgramms die des ersten überschreibt. Das will ich so nicht.

    Wenn ich popen() nutze, dann kann ich wunderbar die Ausgabe des ersten Prgramms sehen aber nicht die des 2ten. Zwar kann ich lesend oder schreibend drauf zugreifen, aber die Ausgabe soll nicht abwechselnd erfolgen(z.B. Hilfe von Threads).

    Ich will keinen Einfluss auf das 2te Programm haben und auch nicht damit kommunizieren. Es soll einfach nur starten und seine printf()-Befehle ausgeben.

    Was ich mir überlegt habe, ist dem system() Befehl nicht nur den String mit dem Programmpfad mitzugeben, sondern auch gleich den Befehl für ein neues Konsolenfenster.
    Wie etwa die Ausgabe in eine Datei umleiten. Aber die Umleitung auf eine Konsole wie Xterm klappt bei mir nicht bzw. bekomme ich nicht hin.

    Danke schonmal

    Gruß Juri



  • So, ich habe es nun hinbekommen. Anstatt das Programm 2 auszuführen und die Ausgabe in eine neue Konsole zu leiten, habe ich einfach eine neue Konsole
    geöffnet und dort das Programm ausgeführt.

    char string[]="xterm -e /home/benutzter/programm2";
    system(string);
    

    Ich weis system() ist gefährlich und sollte vermieden werden. Aber der übergebene String kann nicht verändert werden. Und das Programm 2 kann keiner einfach durch ein anderes, mit gleichem Namen, ersetzen.

    Bei Gelegenheit werde ich das auch mal versuchen mit popen() zu lösen.

    EDIT:
    Das hat doch nicht funktioniert: sobald der system()-Aufruf erreicht wird, erfolgt im ersten Fenster keine Ausgabe mehr, erst wenn was 2te Fenster schließt erfolgt wieder eine Ausgabe am ersten.



  • "xterm -e ... &"



  • Danke für die Antwort, das läuft nun so.
    Aber das aufgerufende Programm 2 beendet sich mit, wenn ich Programm 1 schließe.
    Ich habe dann das gesendete Signal abgefangen und bin fürs erst so zufrieden 🙂



  • in den Befehl noch nohup vornedran, dann sollte es gehen.



  • So,

    ich melde mich mal wieder. Nun ich habe fast die selbe Ausgangsstellung.
    Nun steht mir X aber nicht mehr zur Verfügung. Ich starte also
    Pragramm 1 in tty1 und irdgendwann soll durch ein Befehl Prgramm 2 in tty2 ausgeführt werden.

    Das einzig brauchbare aus der Googlesuche ist folgender Befehl:

    programm &>/dev/tty2 </dev/tty2
    

    Leider sieht man dabei nicht mehr die Ausgabe von Prgramm1 und ich muss mich erst auf den verschiedenen ttyx anmelden.

    Gruß
    Juri


Anmelden zum Antworten