나는 5 개의 자식 프로세스를 생성 한 다음 execvp를 전달하는 숫자가 짝수인지 아닌지를 알려주는 isEven이라는 두 번째 프로그램에 자식 프로젝트를 생성하려고합니다. 그러나 execvp 호출은 gdb에서 실행하면서 계속 실패하고 실행되지 않습니다. args 및 load (args)는 모두 다른 함수에서 호출됩니다.c execvp를 사용하여 프로그래밍
미리 감사드립니다.
//Code to load binary
void load(char* args[])
{
execvp("./isEven", args);
printf("ERROR\n");
}
//args being passed in
char *args[] = {"./isEven", number, NULL};
load(args);
여기 제가 작성한 작은 프로그램이 제가 지금하고있는 것과 똑같은 일을합니다. Gdb에서 세그먼트 오류가 발생했다고합니다.
int main(int argc, char *argv[])
{
int returnCode = fork();
if(returnCode == 0)
{
char *args[] = {"./isEven", 12345, NULL};
execvp("./isEven", args);
printf(errno);
printf("ERROR: execvp failed\n");
exit(-1);
}
else if(returnCode < 0)
{
fprintf(stderr, "fork failed\n");
}
else
{
//i am the parent
printf("I am the parent");
}
return 1;
}
'숫자'는 무엇입니까? 나머지 프로그램은 어디 있니? (프로그램의 나머지 부분이 너무 큰 경우 더 작게 만들고 문제가 여전히 발생하는지 확인하십시오. [mcve]) – Ryan
execvp는 실패하면'errno'를 설정합니다. – tkausl
나는 execvp가 작동하지만 gdb가 나에게 seg fault를 주는지를 테스트하기 위해 빠른 프로그램을 작성했다. – Steven