/ / Как мога да получа връщащата стойност на execv? - c ++, execv

Как да получа връщащата стойност на execv? - c ++, execv

Аз съм наистина нов за C + + и се опитвам да получа продукцията от:

execv("./rdesktop",NULL);

Аз съм програмиране в C + + и RHEL 6.

Подобно на FTP клиент, бих искал да получа всички актуализации на състоянието от моята външна работеща програма. Може ли някой да ми каже как мога да направя това?

Отговори:

1 за отговор № 1

Можете да разгледате изходния статус на детето чрез обаждане wait, waitpid, wait3 или 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 за отговор № 2

execv замества текущия процес, така че веднага след изпълнението му това, което ще изпълнява, ще бъде кой да е изпълним.

Обикновено правите fork, и тогава execv само в детския процес. Основният процес получава PID на новото дете, което може да използва за наблюдение на изпълнението на детето.