当前位置: 首页 > 面试题库 >

fork()和输出

葛驰
2023-03-14
问题内容

我有一个简单的程序:

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

程序执行后,我的输出是:Hello World Hello World。为什么会发生这种情况而不是一次发生Hello world?我猜想子进程会在后台重新运行,并且输出缓冲区在进程之间或沿这些进程的东西之间共享,但是是这种情况还是正在发生其他情况?


问题答案:

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

仅是因为cout是缓冲的IO 。如果使用了cerr(未缓冲),则应该只看到一次该消息,即前叉。



 类似资料:
  • 描述 (Description) 此函数使用fork()系统调用强制执行新进程。 任何共享套接字或文件句柄都跨进程重复。 你必须确保等待你的孩子,以防止形成“僵尸”过程。 语法 (Syntax) 以下是此函数的简单语法 - fork 返回值 (Return Value) 此函数在成功时将fork和子进程ID返回到父成功0到子进程时返回undef。 例子 (Example) 以下是显示其基本用法的

  • 此函数用于在系统上生成新的子进程。 语法 (Syntax) fork() 参数 (Parameters) 没有 返回值 (Return Value) 此函数返回新进程的进程ID。 例子 (Example) /* Main program */ options arexx_bifs say fork() 当我们运行上述程序时,我们将得到以下结果。 返回的进程号因系统而异。 结果的一个例子如

  • 我想从STDIN读取输入。我在C中使用fork()方法。我有子进程和父进程。我的输入是多行的。父进程只等待子进程终止,子进程只读取第一行,子进程终止后,父进程继续读取。我想要打印行。例如;输入-> null 子进程打印“星期一”,父进程打印“星期二”和“星期三”。一旦到达文件结尾,程序就会终止。 ./program

  • 问题内容: 我们在Java中使用了三种不同的多线程技术 -Fork / Join pool,Executor Service和CountDownLatch 叉子/加入池 (http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel- programming.html ) Fork / Join框架旨在使分治算法易于并行化。这种类型的算法非

  • fork-join框架允许在几个worker上中断某个任务,然后等待结果将它们组合起来。 它在很大程度上利用了多处理器机器的容量。 以下是fork-join框架中使用的核心概念和对象。 Fork Fork是一个过程,在这个过程中,任务将自身分成较小且独立的子任务,这些子任务可以同时执行。 语法 (Syntax) Sum left = new Sum(array, low, mid); left.

  • Fork 是一个PHP开发的CMS系统,面向终端用户而非设计师和开发者,因此简单易用是它的特点。支持多语言。