我正在尝试创建5个孩子和1个父母。但是父母会创建它们(至少有4个。因为首先我们需要分叉)但它会创建一堆孩子。找不到我做错了什么。好吗?
composer update sonata-project/admin-bundle
答案 0 :(得分:4)
每次分叉后,你都会加倍处理数量。这是你的代码:
child1=fork(); // we have two now
child2=fork(); // each one of them forks - we have 4
child3=fork(); // 8
child4=fork(); // 16
您需要检查fork的返回值。当它为非0时,您在父级中,并且可以再次分叉。如果它是0,你就是孩子,你不应该fork()
- 做你的孩子的家务。
当您检查返回值时,您也可以检查-1
- 这意味着fork()
失败了。由于看起来不可信,我知道这种情况发生的生产系统。
答案 1 :(得分:0)
永远记住 - 当你执行fork()时,child和parent再次从fork()语句的下一行开始执行。 fork()在子进程中返回0,在父进程中返回子进程的PID。因此,在你的情况下,孩子和父母他们两个再次分叉。您正在创建一个流程树。
这样做
int pid;
if((pid=fork())==0)
{
// Child Process
printf("I'm child");
}
else
{
// Parent process
// Again do fork() here
}