【问题标题】:fork() with of elsefork() with of else
【发布时间】:2016-02-15 06:23:19
【问题描述】:

我有以下关于 fork() 进程的查询: 说我有一个代码:

if(fork()||fork())
printf("1");
else if(!fork())
printf("2");
else
printf("3");

其中,将打印 1,2 或 3。 我知道 fork() 为父进程返回非零,为子进程返回 0。因此,当它遇到第一个语句时,第一个 fork() 调用将为父进程返回 1,为子进程返回 0。因为有||运算符,第二个 fork() 将仅在第一个操作数返回 0 时运行。因此第二个 fork 将在子级而不是父级上调用。我的理解正确吗?如果是,则 1 将由孩子打印。那么它会去 else if 和 else 块吗? 任何帮助将不胜感激!

【问题讨论】:

  • 请缩进您的代码。

标签: c if-statement process fork


【解决方案1】:

第一个进程将打印 1。

原始进程的子进程将在 || 的后半部分返回 true 来打印 1。

|| 之后的 fork 的子节点由于 ! 将导致 else-if 失败并打印 3 而它的孩子将打印 2 因为 !0 为真。

【讨论】:

  • 谢谢@xaxxon。如果我理解正确,将仅由第一个 fork() 的父进程而不是子进程打印 1 吗?如果是,父级是否会退出并继续从第一个 fork() 中的子级在 || 之后评估第二个 fork() ?
  • 第一个 fork 的子进程在第一个 fork 上得到了 false return,因此它评估 || 之后的位,这导致它再次 fork。原来的孩子然后收到一个非 0(真)的返回值,导致原来的 if 语句返回真。
  • 再次感谢@xaxxon。我明白你的意思了。因此,在第二个 fork() 的这个孩子之后将继续 else if(!fork()) 块。并且因为这个新的第三个 fork() 的孩子返回 0,使 else if(! operator) 块为 true,将打印 2 和来自第二个叉子的原始子代将打印 3.
猜你喜欢
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 2015-02-13
  • 2019-10-25
  • 2022-12-01
  • 2023-03-29
  • 1970-01-01
  • 2016-07-06
相关资源
最近更新 更多