c - c中的fork()系统调用

标签 c unix fork

    #include <stdio.h>
    #include <unistd.h>
    int main()
    {
       fork();
       fork() && fork() || fork();
       fork();

     printf("forked\n");
     return 0;
    }

如何计算执行程序后产生的进程数,这导致难以理解? 帮我查一下。

平台--UBUNTU 10.04

最佳答案

让我们跟随 fork 树,假设没有 fork 失败

fork();

现在我们有两个进程,到目前为止,谁是 child 谁是 parent 并不重要,称它们为 p1 和 p2

fork()

这两个进程都产生了另一个子进程,所以我们有 4 个进程,其中两个(p3、p4)的结果为零,另外两个(p1 和 p2)的结果为非零

   && fork()

p1 和 p2 再次 fork,给 p5 和 p6,总共六个进程。在 p1 和 p2 中,&& 的计算结果为 true,因此它们不会在此行中再次 fork 。对于 p3、p4、p5、p6,&& 的计算结果为 false,因此它们 fork

              || fork();

在这里,产生了四个新进程,总共有 6 + 4 = 10。

fork();

10 个进程中的每一个再次 fork,产生 20 个。

关于c - c中的fork()系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8726965/

相关文章:

ruby - 使用陷阱在 ruby​​ 中 fork 回调

c - 写入管道总是失败

c - 为什么在初始化函数指针数组时有一个 "warning"?

c - C中的数组问题

linux - 检查所有目录中公共(public)子目录中的文件数

perl - 查找数字,并删除与此数字相等的相邻字符

node.js - 在前台启动 redis 并使用一个命令并行但串行地启动 Node 服务器

fork - 将互斥锁从父进程复制到子进程

c - 如何组合变量来表示C中的科学记数法?

c - 如何使用 Cython 将 C 结构数组转换为 numpy 数组