C程序中的fork()

Abh*_*tha 8 c fork pthreads

这是最近GATE入学考试的一个问题.
进程执行代码

fork();  
fork();  
fork();  
Run Code Online (Sandbox Code Playgroud)

创建的进程总数是

(A)3.(B)4.(C)7.(D)8.

我的回答是(A)3.

我的观点是,在每个fork()之后,将创建1个子进程,并且父进程将正常继续.

教练机构的不可靠答案(没有任何解释)是(C)7.

我认为他们认为每个fork都会创建一个子进程和一个新的父进程.而且他们也在计算所有父进程.[我不允许发布图片,但我的朋友在图表中解释了一个树,每个左边的节点在两个节点中向下分叉.因此左边有4个父节点,右边有3个子节点.] 但问题清楚地提到了子进程.而且我也不认为父进程是在分叉中新创建的.

有人可以解释一些分叉的基本原理,并请问上述问题的正确解决方案.

PS如果编程语言在分叉概念上有任何不同,那么按照教学大纲,这应该是C或C++程序.

Ber*_*ann 26

fork()导致原始进程和一个子进程从代码中的该点开始.所以你有这张照片:

在此输入图像描述

  • 在图上很好的工作. (2认同)

Jon*_*ler 15

我认为总共有8个过程,或原始的7个后代,或者原始的3个直接子女(其他是孙子和曾孙子).

  • 在第一个之后fork(),假设没有失败(整个),有两个过程.
  • 每个都fork()再次执行- 所以现在有四个进程.
  • 其中每一个都fork()再次执行- 所以现在有八个进程.