【发布时间】:2010-04-13 00:00:15
【问题描述】:
我正在尝试使用 fork() 找出一段 C 代码的输出,但我在理解它为什么会这样出现时遇到了一些问题。我知道当使用 fork() 时,它会并行启动程序的另一个实例,并且子实例将返回 0。有人可以逐步解释下面代码块的输出吗?谢谢你。 编辑:我忘记在 FOR 循环后添加 EXIT(1)。我的道歉。
main() { int status, i;
for (i=0; i<2; ++i){
printf("At the top of pass %d\n", i);
if (fork() == 0){
printf("this is a child, i=%d\n", i);
} else {
wait(&status);
printf("This is a parent, i=%d\n", i);
}
}
exit(1);
}
【问题讨论】:
-
...是如何产生的?
-
你为什么不告诉我们输出以及它有什么令人困惑的地方。
-
你运行了吗?因为这是一个测试程序,所以我会做第一步。当您查看输出时,您可以轻松推断出发生了什么,不是吗?
-
是否应该不读取第一个条件:
if ((status = fork()) == 0){而不是 - 这样等待实际上是在等待父级的 PID? -
我的意思是我想在运行之前预测输出。