【发布时间】:2016-11-11 15:23:43
【问题描述】:
我在C 中有一个函数,它创建一个子进程并使其运行execvp。
int Execute(char **arg)
{
pid_t pid;
int status;
if ((pid=fork()) == 0)
{
execvp(arg[0],arg);
perror("Execvp error");
exit(1);
}
else if (pid > 0)
{
waitpid(pid, &status, 0);
}
else
{
perror("Fork error");
exit(2);
}
}
现在我想将函数更改为实际运行execvp 几次(例如5 次),并让父进程等待所有子进程完成。尝试将其全部包装在 for 循环中,但 execvp 只执行一次。我知道基本上execvp'替换'当前程序代码,但不知道迭代是否继续。
感谢您的帮助!
【问题讨论】:
-
注意
exit不是信号安全的,你不应该在子进程中fork之后使用它。首选_Exit。 -
你能告诉我们你的循环吗?在子进程中要小心退出循环,并且只在父进程中调用 fork。另请注意,您可能必须收集所有子 PID。
-
为什么你显示正在运行的代码并隐藏这个问题所涉及的版本,会说不工作的代码?
-
OT:
status未定义。 -
@alk 抱歉,我自己在玩这个
for循环,必须清理才能显示代码。忘记包含status声明。