【问题标题】:How this fork() code create five processes? [duplicate]这个 fork() 代码如何创建五个进程? [复制]
【发布时间】:2014-03-23 09:34:42
【问题描述】:
main()
{
fork() && fork() || fork();
printf("forked\n");
return 0;
}
//怎么打印5次而不是8次?
【问题讨论】:
标签:
c
unix
operating-system
【解决方案1】:
因为 and 运算符。请记住,一旦遇到错误,操作员就会终止。 fork 将为父级或子级(忘记)返回 0(false),并且它将终止跳过其他 2 个 fork 的布尔表达式,这就是为什么您将只打印 fork 5 次而不是 8 次
【解决方案2】:
因为短路。
如果我重写这个:
main()
{
// fork() && fork() || fork();
if (fork()) {
if (!fork()) {
fork();
}
} else {
fork();
}
printf("forked\n");
return 0;
}
在第一个fork 之后,您将有一个进程将立即进入 else 分支,而另一个进程将继续。进入 else 循环的那个只会分叉一次(右分支)。进入内部的那个会分叉一次,它的孩子会再次分叉。
f
/ \
f f
|
f