int main(void)
{
printf("Hello, world! \n");
fork();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么它只打印2个你好世界?如果系统执行函数fork()的外推时间是创建的,则需要永久打印"Hello,world!\n"?
执行程序时,fork会创建一个新进程并在您调用的位置继续执行fork().
因此,当您到达时fork(),程序已经调用printf("Hello, world! \n");,父进程和子进程都只是处理return 0;完毕并且程序已完成执行.
如果你只想永远打印"Hello world",那就做:
while(true) {
printf("Hello, world! \n");
}
Run Code Online (Sandbox Code Playgroud)
如果你想制作一个叉炸弹(坏):
while(true) {
fork();
printf("Hello, world! \n");
}
Run Code Online (Sandbox Code Playgroud)
我不建议运行此代码,因为它不安全,可能会崩溃您的终端/计算机.
本程序应打印Hello world一次.如果它打印两次仍然是因为line buffer没有清除.
应该清除行缓冲区,因为\nprintf.still中没有清除它意味着这与您用来执行代码的平台有关.
你可以fflush(stdout)在之后添加来验证这一点printf().
int main(void)
{
printf("Hello, world! \n");
fflush(stdout);
fork();
return 0;
}
Run Code Online (Sandbox Code Playgroud)