操作系统:程序创建了多少个进程?

au.*_*.tw 2 operating-system

#include<stdio.h>
#include<unistd.h>

int main()
{
    int i;
    for(i=0;i<4;i++)
        fork();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:包括初始父进程,程序创建了多少进程?

我认为这个答案是1 + 4 = 5,1个父进程和4个子进程,我是对的吗?

谢谢

Aki*_*008 8

for(i=0;i<4;i++)
    fork();
Run Code Online (Sandbox Code Playgroud)

这段代码等同于:

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

让我们说这个过程从p0开始.流程图如下所示:

流程创建图

上面的图像说明了这一切,当第一个fork()被执行时,它会创建一个新进程,并留下三个fork()来执行.现在,这里存在一个父线程和一个子线程来执行另外三个fork()语句.因此,子进程p1将创建p5,p6和p7,父进程将创建p2,p3和p4.在创建了p2之后,需要为执行第二个fork()语句后创建的子线程p2执行两个fork().通过这种方式,创建了这个父子进程.

  • 为什么p11没有自己的另一个孩子? (3认同)
  • 作为p11的孩子,不会也有p15吗?它会在其计数器为 2 的情况下创建,并且还有一个分叉要执行,使总数为 16 而不是 15。 (2认同)
  • 我同意。应该有 p15 作为 p11 的子项。事实上,一般来说,当你调用 k 次 fork() 时,你会得到一个阶数为 k 的“二项式树”,即 Bk。这里我们应该有二项树,B4。[B4图片](http://cse.iitkgp.ac.in/~abhij/course/lab/Algo1/Autumn11/lab/binotree4.jpg) (2认同)

Jai*_*oya 8

使用fork()三次回答

使用fork()四次的答案是:2*2*2*2 - 1 = 16 - 1 = 15个进程.