C 使用这些fork()语句创建了多少个进程?
我相信这创造了24个过程;但是,我需要核实。这些问题常常使我感到困惑。谢谢你的帮助C 使用这些fork()语句创建了多少个进程?,c,process,operating-system,fork,C,Process,Operating System,Fork,我相信这创造了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; }
#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;
}
#包括
#包括
#包括
内部主(空)
{
pid_t pid=fork();
pid=fork();
pid=fork();
如果(pid==0)
{
fork();
}
fork();
返回0;
}
你是对的。是24。在最终返回语句之前,刚刚编译并运行了它。有24行输出。这很容易理解。fork
调用每次执行时都会创建一个额外的进程。调用在新(子)进程中返回0
,在原始(父)进程中返回子进程的进程id(不是零)
pid==0
,另一半具有pid!=0
这样计算: 从1(主进程)开始,如果fork不在内部,则为每个fork设置两次(pid==0),否则将当前进程的1/2添加到当前进程数中 在代码中: 1P 得到了#1 fork(),因此将当前进程数加倍。现在新的进程数2P 得到了#2 fork(),因此将当前进程数加倍。现在是新的流程4P数量 得到了#3 fork(),因此将当前进程数加倍。现在是新的进程8P数 得到了#4 fork(),但等待它处于if条件so(8+4=12)p
得到了#5 fork(),因此将当前进程数加倍。现在新的进程数24P此语句有24个以上的子进程。
每次调用fork()都会导致两个进程:子进程和父进程。因此,第一个fork会导致两个过程。这两个进程到达第二个fork(),生成四个进程。最后一个fork()是由这四个进程完成的,另外还有八个进程。除了一个以外,所有这些进程(原始进程)都是至少一个fork的子进程。将printf放入其中,然后编译并运行它,您将看到。
fork()
也可能无法返回-1
,因此您可能会声明“不超过”24个进程,而不是“完全”24个。
pid_t pid = fork(); // fork #1
pid = fork(); // fork #2
pid = fork(); // fork #3
if (pid == 0)
{
fork(); // fork #4
}
fork(); // fork #5