【问题标题】:C++ fork() looks strange on linux terminal [closed]C ++ fork()在Linux终端上看起来很奇怪[关闭]
【发布时间】:2016-05-12 15:20:49
【问题描述】:

我正在尝试在 C++ 中使用 fork()。 但是,在终端上看起来很奇怪。

正如您在屏幕截图中看到的那样,我的代码只是输出其进程的 PID 以及它是子进程还是父进程。 但是当父进程完成后,子进程的输出会打印在新的提示符上。

最重要的是,在 who 程序完成后,它仍然等待我的命令。

我不明白为什么它仍然如图所示等待输入。

【问题讨论】:

  • 所有代码和输出都应该粘贴在这里,而不是链接到外部网站。
  • 请不要发布文字图片,而是将文字包含在文字中。

标签: c++ c linux fork


【解决方案1】:

fork() 不会生成“空”进程二进制文件。它创建调用进程的克隆,然后两个进程并行运行。这意味着,如果分叉的进程没有execve 进入另一个进程映像或终止,那么您最终会以几乎相同的状态运行同一程序的两个副本。它们之间的唯一区别是,子进程得到一个 0 作为 fork 的返回值,而父进程看到的是子进程 PID。

您肯定知道这些科幻故事,其中一个人突然被复制到量子级别并遇到他们的原件,他们会争论谁是原件,谁是副本。这正是父子进程在fork之后的情况。

最重要的是,在 who 程序完成后,它仍然等待我的命令。

不,它没有。在您的控制台上看起来就像这样:父进程终止,因此 shell 将打印提示。然后子进程在提示后打印它的东西。尝试用 sleep 调用,即

~/... > ./hw3 ; sleep 1

【讨论】:

  • 非常感谢!我希望我有足够的声誉来投票给你。
  • @JustinOh 为你投票。如果它回答了您的问题,您可以接受答案,并自己获得+2。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 2020-06-23
  • 1970-01-01
  • 2013-02-24
  • 2022-12-18
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多