int main(void)
{
printf("Hello, world! \n");
fork();
return 0;
}
为什么只打印两个hello world? 如果在系统执行功能fork()新过程时创建了,是否需要永远打印“ Hello,world!\ n”?
答案 0 :(得分:6)
在执行程序时,fork创建一个新进程,并在调用fork()
时继续执行。
因此,当您到达fork()
时,该程序已经调用了printf("Hello, world! \n");
,并且父级和子级进程都只是return 0;
且程序完成了执行。
如果您只想永久打印“ Hello world”,请执行以下操作:
while(true) {
printf("Hello, world! \n");
}
如果您想制作叉子炸弹(bad):
while(true) {
fork();
printf("Hello, world! \n");
}
我不建议运行此代码,因为它不安全,并且可能会使您的终端机/计算机崩溃。
答案 1 :(得分:6)
该程序应打印一次Hello world
。如果仍然打印两次,仍然是因为line buffer
没有被清除。
应该清除行缓冲区,因为您的printf中有\n
。仍然没有清除它意味着这与您要用来执行代码的平台有关。
您可以通过在fflush(stdout)
之后添加printf()
来进行验证。
int main(void)
{
printf("Hello, world! \n");
fflush(stdout);
fork();
return 0;
}