我相信这创造了24个过程;但是,我需要验证。这些问题经常让我感到困惑。谢谢你的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid = fork();
pid = fork();
pid = fork();
if (pid == 0)
{
fork();
}
fork();
return 0;
}
答案 0 :(得分:27)
通过这个很容易理由。 fork
调用每次执行时都会创建一个额外的进程。该调用在新(子)进程中返回0
,在原始(父)进程中返回子进程id(非零)。
pid_t pid = fork(); // fork #1
pid = fork(); // fork #2
pid = fork(); // fork #3
if (pid == 0)
{
fork(); // fork #4
}
fork(); // fork #5
pid==0
,一半有pid != 0
答案 1 :(得分:3)
以这种方式计算:
从1(主进程)开始,如果fork不在内,则每个fork使它成为两次if(pid == 0)否则将当前进程的1/2添加到当前进程数。
在你的代码中: 1P 得到#1 fork()所以加倍了当前的进程数。现在新的进程数量为2P
得到#2 fork()所以加倍了当前的进程数。现在新的进程数量为4P
得到#3 fork()所以加倍了当前的进程数。现在新的流程数8P
得到了#4 fork(),但等待条件如此(8 + 4 = 12)P
得到#5 fork()所以加倍了当前的进程数。现在新的流程数量为24P
答案 2 :(得分:1)
你是对的。它是24.刚刚在最终返回语句之前编译并运行了w / printf。得到24行输出。
答案 3 :(得分:0)
此声明包含24个以上的子进程。 每次调用fork()都会产生两个进程,即子进程和父进程。因此,第一个fork导致两个进程。这两个进程到达第二个fork(),产生四个进程。最后一个fork()由四个进入,更多的是净八个进程。除了其中一个进程(原始进程)之外的所有进程都是至少一个分叉的子代。