C:fork()子进程

时间:2014-02-17 03:33:58

标签: c shell fork

根据我正在阅读的教科书,下面的代码创建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()时,它只在父进程上运行?

2 个答案:

答案 0 :(得分:1)

每次成功拨打fork(),都会创建一个新流程。

在第一个示例中,子进程(fork()的返回值为0)调用exit();,这意味着他们不会调用下一个fork()

在第二个例子中,每个子进程都继续分叉。

答案 1 :(得分:1)

当调用fork()时,它会复制父数据并从该点开始单独执行。因此,父或子的执行取决于进程的调度。无论是孩子还是父母,无论哪个进程获得cpu时间都将被执行。我们必须注意哪个代码应该由哪个进程(子进程或进程)运行。