我是C ++的新手,我正在尝试从
获取输出execv("./rdesktop",NULL);
我使用C ++和RHEL 6进行编程。
与FTP客户端一样,我希望从外部运行程序中获取所有状态更新。有人可以告诉我如何做到这一点吗?
答案 0 :(得分:4)
execv
替换当前进程,因此在执行它之后立即执行的将是您指定的任何可执行文件。
通常,您只在子进程中执行fork
,然后执行execv
。父进程接收新子进程的PID,它可以用来监视子进程的执行情况。
答案 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 %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);
}
}