我正在学习关于进程分叉和内存管理的知识,我遇到了这段代码:
#include <stdio.h>
#include <libc.h>
int main() {
for (int i = 0; i < 3; ++i) {
printf("*");
fflush(stdout);
fork();
}
return 0;
}
根据我的计算,应该会产生7颗星:初始进程打印了一个星号(1颗星),然后分叉,现在我们有了两个进程,每个进程都打印了一个星号(1 + 2 = 3),然后它们再次分叉,所以我们有了四个进程,每个进程都打印了一个星号,随着程序的结束而死亡。
因此,我们应该得到1 + 2 + 4 = 7颗星。
然而,在某些运行中,我只得到了6颗星,就像下面的截图一样:
有时候当我运行程序时,一切都很好,我得到了预期的7颗星。
到目前为止,我在互联网上搜索了很多,但没有找到类似的情况。调试也没有帮助。
那么,是什么原因导致这种奇怪的行为,我该如何解决?
printf("%d\n", i)
代替printf("*")
。这样可能会给你更多的信息。 - Jabberwocky