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

时间:2013-11-17 06:47:55

标签: operating-system

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

int main()
{
    int i;
    for(i=0;i<4;i++)
        fork();
    return 0;
}

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

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

感谢

5 个答案:

答案 0 :(得分:8)

for(i=0;i<4;i++)
    fork();

这段代码等同于:

fork();
fork();
fork();
fork();

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

Process-creation diagram

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

答案 1 :(得分:7)

Answer using fork() three times

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

答案 2 :(得分:3)

尝试将sleep语句添加到程序的末尾,如下所示:

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

int main()
{
    int i;
    for(i=0;i<4;i++)
        fork();
    sleep(10000);
    return 0;
}

接下来,编译并运行您的程序。然后运行pstree以查看进程层次结构的外观。

答案 3 :(得分:0)

非常简单,在这个问题中,您只是注意到问题说包括初始父进程,所以在这种情况下2 * 2 * 2 * 2-1是创建的进程数,并且因为问题说,包括最初的父母,答案是16 。 好运:)

答案 4 :(得分:0)

enter image description here

此解决方案受到操作系统参考书的启发,这意味着每个级别的父进程都转到下一个分支,而上一个分支终止,因此我们只计算叶子数。