fork() 理解,关于执行和 children

fork() understanding, about execution and children

我才刚刚开始 fork(),我在理解并行执行方面遇到了一些困难。我找到了这个示例代码,我想知道它第一次是 true 还是 false(我知道 pid1==0 是否意味着它是 child,等等).我也想知道有多少份(children会被创建)和一般执行的一些细节。

我已经尝试 运行 它并添加了 return 0; (我的原始来源没有它)只是为了看看是否退出...但是正如你所看到的 "waits"

http://i.imgur.com/D3XEFgs.png

int main(void)
{
    int pid1, pid2, pid3, pid4;
    pid1=fork();
    if (pid1!=0) 
    { 
        pid2=fork(); 
        pid3=fork(); 
        printf("\t\t IF(TRUE) pid1=%d and pid2=%d and pid3=%d\n",
               pid1, pid2, pid3);
    }
    else
    {
        pid4=fork();  
        printf("\nIF(False) FATHER is talking with pid1=%d and pid4=%d\n",
               pid1, pid4);
    }
    return 0;
}

第一次使用true和false。

fork() 复制程序(创建 1 child)并且两个程序从该点继续执行。 child 进程将采用一个分支,parent 进程将采用另一个分支。

fork()个数如下:

您从 1 个进程开始

pid1 之后 -> +1 个进程

Parent 分支机构

pid4 之后 -> +1 个进程

Child 分支机构

pid2 之后 -> +1 个进程

两个新创建的进程 运行 fork() pid3,所以在 pid3 -> +2 个进程

之后

你得到5 children + 原始进程。

该程序创建了五个后代进程,并对 printf 进行了六次调用,其中四次是 IF(TRUE) 消息,两次是 IF(FALSE)。这是控制流程的 ASCII-art 图;每次分支时,两边都被执行,parent 直接向下,child 向右。数字是初始化 pid1pid2、...变量的 fork 调用,字母 T 和 F 是 IF(TRUE)IF(FALSE) 消息,以及_ 是函数末尾的 return 0。这个程序不等待任何东西;所有控制流路径最终都到达 return 0

|
1
|\------\
2       4
|\--\   |\
3   3   | |
|\  |\  | |
T T T T F F
| | | | | |
_ _ _ _ _ _

输出消息可能以任何顺序出现。并且最顶层的 parent 进程可能会在所有后代进程写入消息之前退出(将控制权返回给 shell),因此(如您的屏幕截图所示)shell 提示也可能与消息混淆。

请注意,根据消息的文本,您的 if 条件向后:pid1 != 0parent[=32= 中为真], 而不是 child.