【问题标题】:Having trouble tracking logic of program includes Fork()无法跟踪程序的逻辑包括 Fork()
【发布时间】:2019-06-23 13:28:07
【问题描述】:

基本上是考试中的一道题。他们要求绘制关于以下问题的流程树。我希望有人愿意帮助并解释我如何跟踪它

  • a) 上面代码的输出--> 下面我给出的图片
  • b) 谁是第一个打印捕获信号的进程
  • c)谁是第一个打印的进程准备好了
  • d) 如果我们在 main() 中删除信号函数会发生什么
  • e)如果我们删除 sleep(2) 会发生什么

这是A的答案,我也不明白。

【问题讨论】:

  • 请勿将代码发布为图片
  • 为什么不直接运行代码看看会发生什么?
  • 如果我一开始不明白发生了什么,我将不明白“调整”问题中发生了什么。运行代码不会给我解释。我已经有了输出在树的问题上,但我需要一个解释。
  • 似乎是时候与您的导师(或助教)“开会”了

标签: c fork zombie-process


【解决方案1】:

有 2 个 fork 调用,它们没有条件,因此我们必须以 4 个进程结束(这是你在图片上看到的第一件事)

详细情况:

第一个根进程存在。

然后它分叉 所以我们有进程根(1)和子(2) 然后,发生另一个 fork 调用,并且在子进程和根进程中都执行此操作,两个进程都将分叉,因此:

root - fork() ----------- fork() -----
          \                  \--- child (3)
           \--child (2)-- fork() ------
                             \---- child (4)

这就是你的图片 (显然,我们无法真正预测 3 是否会在 4 之前生成,因此 4 可能是第二个根子节点,而 3 可能是 2 的子节点)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多