【发布时间】:2012-02-15 19:10:28
【问题描述】:
这是最近的 GATE 入学考试中的一道题。
一个进程执行代码
fork();
fork();
fork();
创建的子进程总数为
(A) 3. (B) 4. (C) 7. (D) 8.
我的答案是(A) 3。
我的观点是每次fork()之后,都会创建1个子进程,并且父进程会正常继续执行。
教练机构给出的不可靠答案(没有任何解释)是(C) 7。
我认为他们认为每个分叉都会创建一个子进程和一个新的父进程。他们也在计算所有的父进程。 [我不允许发布图片,但我的朋友在图表中解释说,一棵树,每个左节点都分叉成两个节点。因此左侧有 4 个父节点,右侧有 3 个子节点。] 但问题清楚地只提到了子进程。而且我不认为父进程是在分叉中新创建的。
有人可以解释一些分叉的基本原理,以及上述问题的正确解决方案吗?
附:如果编程语言在分叉的概念上有任何不同,那么根据教学大纲,这应该是 C 或 C++ 程序。
【问题讨论】:
-
由第一个进程创建的子进程自己继续到
fork()。你也应该数一数。 -
不,分叉是一个操作系统概念——编程语言无关紧要。
-
这说明了为什么多项选择题对于展示理解是非常有害的。如果您必须写一个解释您如何得出答案的答案,即使您得出与“官方答案”不同的结论,您也可以获得理解这些概念的功劳。例如,是否要计算子进程的子进程?它改变了给出的答案。
-
实际上,一个非常好的问题是:证明每个答案 (a) 3、(b) 4、(c) 7 和 (d) 8 的合理性。
-
@Rup 作为一个操作系统概念,在 windows 和 unix 上分叉会有所不同吗??