分叉示例帮助

Fork example assistance

我正在学习fork,希望有人能提供所提供代码的父子关系图。我已经在 C 中 运行 它,并得到了输出。只是需要确认一下我的理解。

#include <stdio.h>

main()
{
  int i, pid, notdone = 1;
  for (i = 0 ; i < 2 && notdone ; i++)
  {
    printf("Tic!\n");
    if ((pid=fork())==0)
    {
      printf("Tac!\n");
      notdone=0;
    }
    else
    {
      printf("Toe!\n");
    }
  }
}

输出:Tic Toe Tic Tac Toe Tac

我相信 fork 被调用了两次,所以有 4 个进程 运行。 1)"Tic"然后fork,Parent先走,"Toe",再次运行循环,"Tic"然后再次fork,但首先等待Child1; "Tac" 然后返回到 Parent,因为条件测试失败,Parent 再次进入,"Toe",再次运行循环但条件失败,因此退出; Child2 开始,"Tac",因为条件测试失败而退出。我没听错吗?

有3个进程:parent和两个children.

parent 执行以下顺序:"Tic"、fork、"Toe"、"Tic"、fork、"Toe" , 退出.

每个 child 执行此序列:"Tac",退出。

输出如何发生交错是未定义的,这意味着没有规则说明它必须如何发生,所以你的"waits"和"goes back" 不正确。在实践中,您可能会发现在未加载的计算机上输出顺序变化不大,因为时间就是它们的时间,但您应该永远不要依赖它。