假设我有一个如下代码
switch (fork()) {
case -1:
//error checking
break;
case 0:
//child code
break;
default:
int i;
for (i = 0; i < n; i++) {
switch (fork()) {
case -1:
//error checking
break;
case 0:
//exec
break;
default:
//parent that waits for all childs to be created
break;
}
}
}
如何让第二个父进程等待所有其他进程完全创建... 我被告知我必须做一个循环,但我不知道如何完全实现它。假设有n个子进程。
答案 0 :(得分:2)
我想你可能会略微误解这个要求。 “第二个父母”一词对我来说没有多大意义。
最有意义的是:
概括地说,您将拥有:
int pid;
for (int i = 0; i < N; i++)
{
switch (pid = fork())
{
case 0:
be_childish(i);
/*NOTREACHED*/
break;
case -1:
// Print error report
break;
default:
printf("Started PID %d\n", pid);
break;
}
}
int status;
while ((pid = wait(&status)) > 0)
{
printf("PID %d exited (status 0x%.4X)\n", pid, status);
}
printf("All done!\n");
请注意/*NOTREACHED*/
评论。我假设子进程从be_childish()
函数中退出。该代码可以通过包含exit(1);
或_exit(1);
或_Exit(1);
来确保无损坏。子进程不会继续循环是非常重要的。