我有一个简单的程序:
int main()
{
std::cout << " Hello World";
fork();
}
程序执行后我的输出是:Hello World Hello World
。为什么会发生这种情况而不是单个 Hello world
?我猜想子进程在幕后重新运行,并且输出缓冲区在进程之间共享或类似的东西,但是这种情况还是发生了其他事情?
最佳答案
这与您最初的想法不太一样。输出缓冲区不共享 - 当您执行 fork 时,两个进程都会获得同一个缓冲区的拷贝。因此,在你 fork 之后,两个进程最终都会刷新缓冲区并将内容分别打印到屏幕上。
这只有在 cout 是缓冲 IO 时才会发生。如果你使用了没有缓冲的 cerr,你应该只会看到一次消息,pre-fork。
关于c++ - fork() 和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364410/