Habe ein Problem mit execve.



  • Hallo.
    Ich habe ein problem.(Wer hätte das gedacht)
    jedenfalls: Ich möchte mittels der funktion execve das prog top auf rufen.(top oder ein anderes prog, aber in diesem Fall top)

    Ich bekomme es einfach nicht hin.

    execve("/usr/bin/top" , argv , 0);
    

    Wenn ich das prg nun starte , dann bekomme ich die meldung :

    TERM environment variable not set.
    

    Kann mir jemand ein kurzes bsp geben, wie man mittels execve ein prog startet? (am besteb top)



  • edit: Plötsinn.

    Du verwendest execve schon richtig, aber übergib top noch ein "-b" oder so als Argument.



  • nman schrieb:

    Plötsinn.

    Warum hast du deinen Beitrag bearbeitet???
    jedenfalls: Dein bsp funkt auch bei mir...aber warum top nicht gehtm peile ich nicht.



  • nman schrieb:

    edit: Plötsinn.

    Du verwendest execve schon richtig, aber übergib top noch ein "-b" oder so als Argument.

    Ach, des klappt nicht.



  • Wie gesagt.
    execve("ps" , argv , 0) funkt aber bei execve("top" , argv , 0) kommt NICHTS!
    ICh verstehs nicht.



  • tuxy schrieb:

    Warum hast du deinen Beitrag bearbeitet???

    Weil ich Dir etwas geantwortet habe, was Dir kaum weitergeholfen hätte, leider war das Forum gerade etwas lahm, sonst hättest die Antwort, die jetzt oben steht, schon eher zu sehen bekommen. 🙂

    Ach, des klappt nicht.

    Doch, bei mir hier schon:

    ~ % cat execve.c          
    #include <unistd.h>
    
    int main(int argc, char* argv[])
    {
            execve("/usr/bin/top" , argv, 0);
            return 0;
    }
    ~ % gcc -o execve execve.c
    ~ % ./execve -b
    


  • nman schrieb:

    tuxy schrieb:

    Warum hast du deinen Beitrag bearbeitet???

    Weil ich Dir etwas geantwortet habe, was Dir kaum weitergeholfen hätte, leider war das Forum gerade etwas lahm, sonst hättest die Antwort, die jetzt oben steht, schon eher zu sehen bekommen. 🙂

    Ach, des klappt nicht.

    Doch, bei mir hier schon:

    ~ % cat execve.c          
    #include <unistd.h>
    
    int main(int argc, char* argv[])
    {
            execve("/usr/bin/top" , argv, 0);
            return 0;
    }
    ~ % gcc -o execve execve.c
    ~ % ./execve -b
    

    Hmmm. Jett bin ich schon etwas weiter aber es funktioniert immer noch nicht.

    Bei Übergabe von -b kommt:

    TERM environment variable not set.
    

    😕 😕 😕
    Wenn ich aber irgendwas zufälliges als argument übergebe, dannn bekomme ich die gleiche Meldung , als wenn ich diese zufälligen args bei top (direkt) übergeben würde.

    Langsam peile ich echt nicht mehr durch.

    (Falls es von wichtigkeit sein sollte....ich nutze SuSE 9.2 und xterm)



  • Vermutlich versucht top bei dir eine Umgebungsvariable auszulesen, da du aber die Umgebung auf 0 gesetzt hast (s. man: environ(7)), besitzt der Prozess auch keine Umgebungsvariablen. Benutz doch einfach einen execve Wrapper (s. man: execl(3)) oder übergib die Umgebung mit.

    Ansonsten zeig mal was bei dir in argv steht.



  • kingruedi schrieb:

    Vermutlich versucht top bei dir eine Umgebungsvariable auszulesen, da du aber die Umgebung auf 0 gesetzt hast (s. man: environ(7)), besitzt der Prozess auch keine Umgebungsvariablen. Benutz doch einfach einen execve Wrapper (s. man: execl(3)) oder übergib die Umgebung mit.

    Ansonsten zeig mal was bei dir in argv steht.

    Danke, jett funktioniert es. Ich hätte einfach envp übergeben sollen.


Anmelden zum Antworten