2017-02-07 7 views
1

execv를 사용하여 명령을 실행하려고합니다. 이 프로그램을 실행 한 후에 "Going to call execv!"라는 문구를 볼 수 있습니다. 표준 출력에 인쇄됩니다.execv를 호출 한 후 이상한 동작

"leaky"프로그램의 인쇄물을 볼 수도 있습니다. 실제로 모든 것이 예상대로 작동합니다. if 또는 else 블록에서 인쇄 명령문을 볼 수 없다는 것, 즉 "execv failed! error :"또는 "valgrind를 성공적으로 실행하지 못했습니다!" 출력에 인쇄 중입니다.

여기에 execv에 대한 몇 가지 분명한 사실이 빠졌습니까? 당신이 얻을 경우

#include<stdio.h> 
#include<errno.h> 
#include<string.h> 
#include<unistd.h> 

int main() 
{ 
    char *args[5] = {"/usr/bin/valgrind", "--leak-check=full", "--log-file=valgrindReport.txt", "./leaky", NULL}; 
    printf("Going to call execv!\n"); 
    if(execv("/usr/bin/valgrind", args) < 0) 
    { 
     printf("execv failed! error: %s\n", strerror(errno)); 
     return 0; 
    } 
    else 
    { 
     printf("Successfully executed valgrind!\n"); 
    } 
    return 0; 
} 
+5

[맨 페이지] (https://linux.die.net/man/3/execv)를 읽으면 다음과 같이 도움이됩니다. "exec() 함수 군 **은 ** 현재 프로세스 이미지를"대체합니다. exec() 함수는 오류가 발생한 경우에만 반환됩니다. " – kaylum

+0

'execv'가 프로그램 실행에 성공하면, 호출자 프로세스는 새로운 프로그램에 의해 "대체"됩니다. 따라서 "프로그램 호출 및 결과 얻기"가 아니라 시스템 기능을 사용하십시오. – yeputons

+0

가능한 [C execv() 함수가 자식 프로세스를 종료합니까?] (http://stackoverflow.com/questions/5172257/does-the-c-execv-function-terminate-the-child-proccess) –

답변

4

는 Valgrind의의 출력은 분명히 execve 성공했습니다. execve이 성공하면 현재 프로세스 이미지를 시작하고 반환하지 않는 이미지로 바꿉니다. execve이 반환되면 실패합니다.