#include<stdio.h>
#include<unistd.h>
int main()
{
int i;
for(i=0;i<4;i++)
fork();
return 0;
}
我的问题:包括初始父进程,程序创建了多少进程?
我认为这个答案是1 + 4 = 5,1个父进程和4个子进程,我是对的吗?
感谢
答案 0 :(得分:8)
for(i=0;i<4;i++)
fork();
这段代码等同于:
fork();
fork();
fork();
fork();
让我们说过程从p0开始。流程图如下所示:
上面的图片说明了这一切,当第一个fork()被执行时,它会创建一个新进程,并留下三个fork()来执行。现在,这里存在一个父线程和一个子线程来执行另外三个fork()语句。因此,子进程p1将创建p5,p6和p7,父进程将创建p2,p3和p4。 在创建了p2之后,需要为执行第二个fork()语句后创建的子线程p2执行两个fork()。 这样就创建了这个父子进程。
答案 1 :(得分:7)
答案 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)
此解决方案受到操作系统参考书的启发,这意味着每个级别的父进程都转到下一个分支,而上一个分支终止,因此我们只计算叶子数。