/ / Jak uzyskać wartość zwracaną przez execv? - c ++, execv

Jak uzyskać wartość zwracaną przez execv? - c ++, execv

Jestem naprawdę nowy w C ++ i próbuję uzyskać dane wyjściowe z:

execv("./rdesktop",NULL);

Programuję w C ++ i na RHEL 6.

Podobnie jak klient FTP, chciałbym uzyskać wszystkie aktualizacje statusu z mojego zewnętrznego uruchomionego programu. Czy ktoś może mi powiedzieć, jak mogę to zrobić?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz sprawdzić status wyjścia procesu potomnego, dzwoniąc wait, waitpid, wait3 lub wait4.

#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 %dn", pid, WEXITSTATUS(status));
exit(WEXITSTATUS(status));
}
if(WIFSIGNALED(status)) {
printf("Process %d killed: signal %d%sn",
pid, WTERMSIG(status),
WCOREDUMP(status) ? " - core dumped" : "");
exit(1);
}
}
case -1:
// fork failed
perror("fork");
exit(1);
}
}

4 dla odpowiedzi nr 2

execv zastępuje bieżący proces, więc natychmiast po wykonaniu tego, co wykona będzie cokolwiek, co określiłeś.

Normalnie robisz fork, i wtedy execv tylko w procesie potomnym. Proces nadrzędny otrzymuje PID nowego dziecka, którego może użyć do monitorowania wykonania dziecka.