fork() 和输出

2024-01-12

我有一个简单的程序:

int main()
{
    std::cout << " Hello World";
    fork();
}

程序执行后我的输出是:Hello World Hello World。为什么会发生这种情况而不是单一的Hello world?我猜测子进程在幕后重新运行,并且输出缓冲区在进程之间共享或类似的事情,但情况是这样还是发生了其他事情?


这并不完全是你最初的想法。输出缓冲区不共享 - 当您执行 fork 时,两个进程都获取同一缓冲区的副本。因此,在分叉后,两个进程最终都会刷新缓冲区并将内容分别打印到屏幕上。

This 只发生因为 cout 是缓冲 IO。如果您使用未缓冲的 cerr,则在分叉前,您应该只能看到该消息一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fork() 和输出 的相关文章