在条件语句内部分叉



我该如何计算;你好世界";在执行该程序之后打印。根据fork的工作方式,我们知道fork作为父进程返回非零值,子进程返回0。

我以前使用过fork((,并在循环中计算fork计数,但没有对条件语句做过任何操作,我该如何开始分解这个问题?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
(fork() && fork() || fork() && fork() || fork() && fork() && fork());
printf("hello world");
return 0;
}

为了更好地了解发生了什么,您应该尝试绘制一个包含父进程和子进程的树。

考虑在分叉((之后:

  • 父进程返回一个数字>0
  • 子进程返回一个数字==0

这意味着:

  • &amp;运算符允许同一父进程有多个子进程,因为只要pid=0(子进程(,结果就为0,并且不再考虑该条件
  • ||运算符允许父进程使用单个子进程,因为只要pid=0(父进程(结果为=0,并且不再考虑该条件

可视化与比您的案例简单得多的案例相关的树:

fork((&amp;fork((&amp;分叉((

P
/ | 
C1 C2 C3

fork((

P
/
C1
/
C2
/
C3

作为一个建议,如果您想了解更多关于正在发生的事情并能够构建树,请将您的printf((替换为:

printf("hello world - pid %d, ppid %dn", getpid(), getppid());

这样您就可以更容易地理解流程树是如何创建的。

最新更新