【发布时间】:2015-02-04 17:31:04
【问题描述】:
我正在学习 fork() 的工作原理,并且在调用 execvp(argh[0], argv); 时遇到了无限循环
这是我的程序:
int main (int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid < 0) { // error occurred
printf("Something went wrong!\n");
exit(-1);
} else if (pid == 0) { // child process
printf("Child process. ");
if(argc == 1 || argc == 0) {
printf("No arguments provided. Terminating child.\n");
exit(0);
} else if(argc == 2) {
printf("One argument provided.\n");
execlp(argv[1], argv[1], NULL);
} else {
printf("More than one argument\n");
execvp(argv[0], argv); // *** It's right here ***
}
} else { // parent process
printf("PARENT started with pid=%d.\n", pid);
int status = 0;
pid_t wait(int *status);
printf("PARENT resumed with status code: %i. Now terminating parent.\n", status);
exit(0);
}
return 0;
}
我正在尝试使用此代码execvp(argv[0], argv) 执行传递给函数的操作(和参数),但是当我执行./arguments ls -l 时会出现无限循环。我应该如何调用 execvp?还是应该调用其他方法?
感谢您的帮助
---更新---
我在答案中进行了建议的更改,即调用 execvp(argv[1], argv);(将 arguv[0] 更改为 arguv[1]),现在我得到 cannot access ls: No such file or directory 而不是无限循环。
【问题讨论】: