谁能告诉我这段c代码会生成什么进程树?
#include <unistd.h>
int main(void)
{
fork() || (fork() && fork());
return 0;
}
最佳答案
这可能是一份家庭作业。不过,这很有趣。
首先:
fork()
为子进程返回 0。fork()
为父级返回一个不等于 0 的值。
因此,在服务器中,逻辑或 (||
) 的第一部分不等于 0,并且表达式的其余部分不会在父级上执行:一次调用 fork。
在子进程中,第一部分是 0,因此执行其余的 fork() && fork()
。因此,在这个 child 上,第一个 fork()
返回一个不等于零的值,导致评估第二部分。因此,有两个新 child 。它们的返回值都是 0,从而短路了计算。
未经测试,在 Safari 中输入。
关于c - 这些 fork() 语句的进程树是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513702/