我不确定在这个程序中会创建多少个进程?我想在while循环中会创建三个子进程。然后,每个子进程将分叉两次,这意味着将有两个子进程加上该子进程创建的进程也将进行分叉,并且每个状态将有4个子进程。总共有12个流程。这是真的吗?
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
pid_t childpid;
int i=0;
while((childpid>0) && (i<3))
{
childpid=fork();
i++;
}
if(childpid==0){
fork();
fork();
}
exit(0);
}
答案 0 :(得分:0)
进程总数为13
while((childpid>0) && (i<3))
只会为父进程执行,因为fork()系统调用会将子进程的pid返回给父进程,并将0返回给子进程。
因此,while循环将生成3个子进程,其中childpid变量值为0,而主父进程现在的childpid变量值等于最后一个分叉子进程的值。
到目前为止的总流程4
对于条件
if(childpid==0){
fork();
fork();
}
每个子进程在第一次fork调用之前产生1个子进程。第二个fork将从第一个fork的两个进程中生成另外两个新进程。因此,对于每个子进程,我们将生成总共3个新进程。 因此,对于来自while循环的3个子进程,我们将生成9个新进程。
因此,进程总数将为4 + 9 = 13