繁体   English   中英

C:fork()子进程

[英]C: fork() child processes

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

每次成功调用fork()都会创建一个新进程。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM