【发布时间】:2021-12-13 12:14:09
【问题描述】:
我想在 for 循环中通过 fork() 创建 n 个子进程,并在子进程全部创建后处理。子进程必须在 父进程执行完毕。
int main(int argc, char *argv[])
{
char cadena[STRLONG];
pid_t pid;
for(int i =0; i<5; i++){
pid = fork();
if(pid == -1){
perror("Error\n");
exit(-1);
}
else if(pid == 0){
break;
}
}
if (pid > 0){
printf("I'm the parent, --> %d\n", getpid());
}
else if(pid == 0){
printf("I'm the child --> %d \n", getpid());
exit(0);
}
for(int i = 0; i<5; i++){
wait(NULL);
}
}
这是我做的,但是子进程在全部创建之前就执行了,不知道怎么解决……
【问题讨论】:
-
fork 会立即启动子进程。停止执行的唯一方法是添加进程间信号量或类似的东西,让孩子们在信号量上等待。
-
可能将您的程序的输出添加到问题中,然后解释为什么它的行为不符合您的预期
-
一个选项可能是创建一个由所有子级继承的管道。在完成所有子代的分叉后,父代可以向管道写入 5 个字节(每个子代一个字节),而子代可以阻塞,直到他们从管道中读取一个字节后再执行其他操作。
-
@IanAbbott 旧管道技巧。好的!不过,通常只需关闭管道就足够了。
-
angel bn:如果你有什么想让我在我的回答中进一步解释的,尽管问,我会尽量说得更清楚。
标签: c fork child-process