2012-03-27 13 views
1

Ich bin wirklich neu in C++ und ich versuche, die Ausgabe von zu bekommen:Wie bekomme ich den Rückgabewert einer Execv?

execv("./rdesktop",NULL); 

Ich programmiere in C++ und auf RHEL 6.

wie ein FTP-Client, würde Ich mag alle bekommen Der Status wird von meinem externen laufenden Programm aktualisiert. Kann mir bitte jemand sagen, wie ich das machen könnte?

+3

Rückgabewert (z. B. Ergebnis von exit() oder ähnlich) oder Ausgabe (d. H. Stdout/stderr)? Dein Fragetitel sagt eine Sache aus, aber deine Frage die andere :-) –

+5

Ich bin nicht sicher, dass du verstehst, was 'execv' tut; Es ** ersetzt ** Ihren Prozess mit dem angegebenen Prozess. Dein Prozess existiert nicht mehr, also gibt es nichts, was man capturen könnte! –

+2

'execv' kehrt nur im Fehlerfall zurück. –

Antwort

1

Sie können den Beendigungsstatus eines untergeordneten Prozesses prüfen, indem Sie wait, waitpid, wait3 oder wait4 aufrufen.

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    pid_t pid = fork(); 
    switch(pid) { 
    case 0: 
    // We are the child process 
    execl("/bin/ls", "ls", NULL); 

    // If we get here, something is wrong. 
    perror("/bin/ls"); 
    exit(255); 
    default: 
    // We are the parent process 
    { 
     int status; 
     if(waitpid(pid, &status, 0) < 0) { 
     perror("wait"); 
     exit(254); 
     } 
     if(WIFEXITED(status)) { 
     printf("Process %d returned %d\n", pid, WEXITSTATUS(status)); 
     exit(WEXITSTATUS(status)); 
     } 
     if(WIFSIGNALED(status)) { 
     printf("Process %d killed: signal %d%s\n", 
      pid, WTERMSIG(status), 
      WCOREDUMP(status) ? " - core dumped" : ""); 
     exit(1); 
     } 
    } 
    case -1: 
    // fork failed 
    perror("fork"); 
    exit(1); 
    } 
} 
4

execversetzt den aktuellen Prozess, so unmittelbar nach dem Ausführen wie wird ist die Ausführung, was ausführbar Sie angegeben haben.

Normalerweise nur fork und dann execv nur im untergeordneten Prozess. Der Elternprozess erhält die PID des neuen Kindes, mit der er die Ausführung des Kindes überwachen kann.