Anzeige:
Ergebnis 1 bis 8 von 8

Thema: aus C++ ein xterm starten

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69

    aus C++ ein xterm starten

    Ich will aus einem c++ shell programm das auf xterm läauft ein neues xterm starten wo dann ein programm läuft.
    Dann möchte ich mit dem Elternprocess per menu den Kindprocess killen können... oder auch am leben lassen :-)

    function fork_irgendwas()
    {
    int id=fork()
    if(id==0){execlp("xterm", "htop(als beispiel)")}
    else
    {return id}
    }

    leider geht das nicht so wie ich mir das gedacht habe...Der elternprocess geht einfach weiter und der child process bleibt im hintergrund ohne ein xterm zu starten...
    Geändert von barton4 (29-08-2006 um 21:56 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    function fork_irgendwas()
    {
    int id=fork()
    if(id==0){execlp("xterm", "htop(als beispiel)")}
    else
    {return id}
    }
    Ist function eine Klasse mit einem Konstruktor der ein int erwartet, oder ein Makro welches int oder so ähnlich wird, oder ein typedef ? Andernfalls währe das kein Ausschnitt eines C++ Programms.

    leider geht das nicht so wie ich mir das gedacht habe...Der elternprocess geht einfach weiter und der child process bleibt im hintergrund ohne ein xterm zu starten...
    Ich kann nicht erkennen was da falsch läuft, zumindest nicht auf den ersten Blick. Du solltest als erstes Fehlerbehandlung einbauen. Wenn eine der Funktionen einen Fehlschlag anzeigt, dann bist du vielleicht schon schlauer.

    Die Manpages (bzw. die Online-Referenz) zu den verwendeten Funktionen hast du durchgelesen, oder?

    Und wie immer gilt, die größten Chancen auf eine hilfreiche Antwort hast du wenn du eine komplettest Beispiel postest welches dein Problem reproduziert.

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Fork gibt -1 zurück, wenn ein Fehler aufgetreten ist.

  4. #4
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69
    #include <iostream>
    using namespace std;
    #include <signal.h>

    int forkProgram()
    {
    int id=fork();

    if(id==-1)
    {
    cout<<"error"<<endl;
    return -1;
    }
    else if(id==0)
    {
    execlp("xterm", "",0);
    }
    else
    {
    return id;
    }
    }




    int main()
    {
    int id;
    string buffer;
    //hier soll dan xterm startet, mit der id will ich später den process wieder killen...
    id=forkProgram();
    while(true)
    {
    cout<<id<<" Soll der Process gekillt werden ja/nein... "<<endl;
    cin>>buffer;
    if(buffer=="ja")
    {
    kill(id, 9);
    }
    }
    }

    das funktioniert jetzt schon gut :-)
    aber ein nebeneffekt hat das, das neue xterm ist nun fokusiert d.h ich muss erst wieder in dass Eltern xterm zurück klicken...

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Wie wäre es mit einem Freundlichlichen kill 15 statt 9?
    Oder erst 15, ein paar Sekunden warten und dann zur Sicherheit 9.

    Dass du umfokussieren musst, kannst du nicht so ohne weiteres umgehen, das ist sache des Windowmanagers.

  6. #6
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69
    oh ja ich änderes auf jeden fall auf 15

    was aber noch seltsam ist, als ich statt exe()...system() genomen habe was ja nochmal ein einen process forkt war der erste child prozess auf einmal
    als root unter htop angezeigt, der 2te dann wieder unter meinem benutzernahmen...

    ob das htop nur falsch anzegit?

  7. #7
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Du darfst ruhig auch code-Tags verwenden.

    Zu deiner Frage: /bin/sh hat nicht etwa ein suid-Bit? (system() verwendet /bin/sh zum ausführen des Kommando)

    Gruss, Andy

  8. #8
    Registrierter Benutzer
    Registriert seit
    11.04.2006
    Beiträge
    69
    nö bei/bin/sh ist alles normal

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •