【发布时间】:2021-03-25 21:56:58
【问题描述】:
程序创建了多少进程,包括 初始父进程?还有“Hello”会打印多少次?
我认为,因为它是 4 个分叉 16 个进程(使用 2^n),并且父进程添加到 16 个进程 = 17。 (不确定)
下面是我的代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
int i;
for(i=0; i<3; i++){
if(fork());
printf("Hello %d\n", getpid());
}
return 0;
}
【问题讨论】:
-
运行时会发生什么?
-
@JJF 打印出 Hello 13 次,并打印 getpid() 号码。
-
你看到了多少个独特的 pid?这就是你问题的答案,现在你只需要弄清楚为什么。
-
@NateEldredge 有 8 个唯一的 pid,有没有办法通过绘制进程树来解释这一点?
-
其实我觉得代码不正确是因为if(fork())后面多了一个分号(;)。此外,我认为您应该寻找的条件是“if (!fork())”,以便打印仅针对创建的子节点而不是父节点执行。还要重新检查您认为循环正在执行的次数。
标签: c linux fork child-process