使用这些fork()语句创建了多少个进程?
我相信这创造了24个过程; 但是,我需要validation。 这些问题经常让我感到困惑。 谢谢您的帮助!
#include #include #include int main(void) { pid_t pid = fork(); pid = fork(); pid = fork(); if (pid == 0) { fork(); } fork(); return 0; }
通过这个很容易理由。 fork
调用每次执行时都会创建一个额外的进程。 该调用在new(子)进程中返回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
- Fork#1创建了一个额外的进程。 您现在有两个进程。
- Fork#2由两个进程执行,创建两个进程,总共四个进程。
- Fork#3由四个进程执行,创建四个进程,总共八个进程。 其中一半有
pid==0
,有一半有pid != 0
- Fork#4由fork#3创建的一半进程执行(因此,其中四个)。 这创建了四个额外的过程。 你现在有12个进程。
- Fork#5由剩余的所有12个进程执行,创建了12个进程; 你现在有二十四岁。
以这种方式计算:
从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
你是对的。 它是24.刚刚在最终的return语句之前编译并运行了w / printf。 有24行输出。
该声明有24个以上的子进程。 每次调用fork()都会产生两个进程,即子进程和父进程。 因此,第一个fork导致两个进程。 这两个进程到达第二个fork(),产生四个进程。 最后一个fork()由四个进入,更多的是净八个进程。 除了其中一个过程(原始过程)之外的所有过程都是至少一个叉子的子项。