2012-03-27 3 views
1

내가 C에 정말 새로운 오전 ++ 내가의 출력 얻기 위해 노력하고 있어요 :execv의 반환 값을 얻으려면 어떻게해야합니까?

execv("./rdesktop",NULL); 

내가 C++에서와 FTP 클라이언트처럼

RHEL 6. 프로그래밍 오전, 나는 모든 좀하고 싶습니다 내 외부 실행 프로그램에서 상태가 업데이트됩니다. 누군가 내가 이것을 할 수있는 방법을 말해 줄 수 있습니까?

+3

반환 값 (예 : 이탈() 또는 유사 결과) 또는 출력 (예 : stdout/stderr)? 당신의 질문 제목은 하나의 것을 말하지만 당신의 질문은 다른 것 :-) –

+5

나는'execv'가 무엇을하는지 이해하지 못합니다; ** ** 귀하의 프로세스를 지정된 프로세스로 대체합니다. 귀하의 프로세스가 더 이상 존재하지 않으므로 캡처 작업을 수행 할 수 없습니다! –

+2

'execv'는 실패한 경우에만 리턴합니다. –

답변

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); 
    } 
} 
4

execv그래서 즉시 사용자가 지정한대로 실행됩니다 실행 있는지를 실행 한 후, 현재 프로세스를 대체합니다.

일반적으로 자식 프로세스에서만 fork을 수행 한 다음 execv을 수행합니다. 부모 프로세스는 새 자식의 PID를받습니다.이 PID는 자식의 실행을 모니터링하는 데 사용할 수 있습니다.

관련 문제