使用fork在此代码段中创建了多少个进程?

时间:2011-07-20 01:48:01

标签: fork

任何人都可以帮助我理解这将如何创建过程吗?

Main()
{
    Fork();
    Fork() && fork () || fork ();
    Fork ();
}

2 个答案:

答案 0 :(得分:3)

尝试绘制流程创建树并研究/记住以下几点:

P1。 fork()将pid(更大的tan 0)返回到当前进程    并在子进程中返回0  P2。你将需要知道如何    表达式A() && B() || C()被评估;例如,如果A()返回    由于0 (false)B,因此0 && whatever函数0不会被评估    始终Main() { Fork() /*[1]*/; Fork() /*[2]*/ && fork ()/*[3]*/ || fork ()/*[4]*/; Fork ()/*[5]*/; }

现在,让我们将调用标记为易于参考:

                          [0]
                /      /     \      \
               [1]    [2]    [3]    [5]

            /  |  \
          [2] [3] [5]

我将绘制第一级创建过程(以及一些第二级):

fork()

上面的树意味着进程[0](初始进程)将执行编号为1,2,3和5的process [0]函数。为什么没有fork()[4]运行fork()[2] && fork[3] ?由于fork()[4]已经评估为true,因此无法评估fork[1]

将类似的概念应用于第二级fork[4]分叉的进程,以查看未调用进程{{1}}的原因。

您可以通过在流程创建树的每个级别应用P1和P2来完成流程创建树。

答案 1 :(得分:1)

请记住,fork有一个返回值,0或PID(无法记住子节点是获取PID还是父节点)。所以&&和||返回PID时,运算符将评估为true,在这种情况下,将分叉更多进程。希望有所帮助

相关问题