【发布时间】:2017-12-06 09:19:31
【问题描述】:
我正在做一个附带项目,我想生成 5 个子进程,然后 execvp 进入第二个名为 isEven 的程序,它将判断传递给它的数字是否是偶数。但是,当我在 gdb 中运行它时,execvp 调用一直失败并且它没有执行。 args 和 load(args) 都在另一个函数中调用。
提前致谢!!!
//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;
}
【问题讨论】:
-
number是什么?程序的其余部分在哪里? (如果程序的其余部分太大了,把它变小,看看问题是否仍然存在。minimal reproducible example) -
execvp 如果失败则设置
errno。 -
我写了一个快速程序来测试我是否可以让 execvp 工作,但是 gdb 给了我一个 seg 错误。