Operating system 操作系统:程序创建了多少个进程? #包括 #包括 int main() { int i; 对于(i=0;i

Operating system 操作系统:程序创建了多少个进程? #包括 #包括 int main() { int i; 对于(i=0;i,operating-system,Operating System,请尝试在程序末尾添加一个sleep语句,如下所示: #include<stdio.h> #include<unistd.h> int main() { int i; for(i=0;i<4;i++) fork(); return 0; } #包括 #包括 int main() { int i; 对于(i=0;i 假设流程从p0开始。流程图如下所示: 上图说明了一切,当第一个fork()被执行时,它创建了一个新进程,剩下三

请尝试在程序末尾添加一个sleep语句,如下所示:

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

int main()
{
    int i;
    for(i=0;i<4;i++)
        fork();
    return 0;
}
#包括
#包括
int main()
{
int i;
对于(i=0;i
假设流程从p0开始。流程图如下所示:

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


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

很简单,在这个问题中,你会注意到问题说包括初始父进程,所以在本例中,2*2*2*2-1是创建的进程数,因为问题说,包括初始父进程,答案是16。 祝好运:)


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

As作为暂挂主题。这个问题也应该结束。p11的子进程不也会有p15吗?它将使用其计数创建呃,在2的时候,还有一个fork需要执行,所以总共16个而不是15个。我同意。作为p11的子级,应该有p15个。事实上,一般来说,当你对fork()有k个调用时,你会得到一个顺序为k,Bk的“二叉树”。这里我们应该有一个二叉树,B4。为什么p11没有自己的另一个子级呢?
#include<stdio.h>
#include<unistd.h>

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