根据我正在阅读的教科书,下面的代码创建N个子进程,这些进程将以唯一状态退出。
/* Parent creates N children */
for (i = 0; i < N; i++)
if ((pid[i] = Fork()) == 0) /* Child */
exit(100+i);
在教科书的早些时候,它声明以下代码将有8行输出:
int main(){
Fork();
Fork();
Fork();
printf("hello\n");
exit(0);
}
这让我相信有2 ^ n个子进程,其中n是fork()被调用的次数。原因是第一个代码只产生N个子进程(而不是2 ^ N),因为子进程每次都退出,所以当调用后续的fork()时,它只在父进程上运行?
答案 0 :(得分:1)
每次成功拨打fork()
,都会创建一个新流程。
在第一个示例中,子进程(fork()
的返回值为0
)调用exit();
,这意味着他们不会调用下一个fork()
。
在第二个例子中,每个子进程都继续分叉。
答案 1 :(得分:1)
当调用fork()时,它会复制父数据并从该点开始单独执行。因此,父或子的执行取决于进程的调度。无论是孩子还是父母,无论哪个进程获得cpu时间都将被执行。我们必须注意哪个代码应该由哪个进程(子进程或进程)运行。