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;
}
[맨 페이지] (https://linux.die.net/man/3/execv)를 읽으면 다음과 같이 도움이됩니다. "exec() 함수 군 **은 ** 현재 프로세스 이미지를"대체합니다. exec() 함수는 오류가 발생한 경우에만 반환됩니다. " – kaylum
'execv'가 프로그램 실행에 성공하면, 호출자 프로세스는 새로운 프로그램에 의해 "대체"됩니다. 따라서 "프로그램 호출 및 결과 얻기"가 아니라 시스템 기능을 사용하십시오. – yeputons
가능한 [C execv() 함수가 자식 프로세스를 종료합니까?] (http://stackoverflow.com/questions/5172257/does-the-c-execv-function-terminate-the-child-proccess) –