我该如何计算;你好世界";在执行该程序之后打印。根据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
这意味着:
- &;运算符允许同一父进程有多个子进程,因为只要pid=0(子进程(,结果就为0,并且不再考虑该条件
- ||运算符允许父进程使用单个子进程,因为只要pid=0(父进程(结果为=0,并且不再考虑该条件
可视化与比您的案例简单得多的案例相关的树:
fork((&;fork((&;分叉((
P
/ |
C1 C2 C3
fork((
P
/
C1
/
C2
/
C3
作为一个建议,如果您想了解更多关于正在发生的事情并能够构建树,请将您的printf((替换为:
printf("hello world - pid %d, ppid %dn", getpid(), getppid());
这样您就可以更容易地理解流程树是如何创建的。