程序的故障跟踪逻辑包括Fork()

时间:2019-06-23 13:28:07

标签: c fork zombie-process

基本上是考试中的一个问题。他们要求绘制过程树对以下问题的看法。我希望有人愿意帮助并向我解释如何进行跟踪

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

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:1)

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

详细情况:

第一个根进程存在。

然后分叉 所以我们有进程根(1)和子进程(2) 然后,发生另一个对fork的调用,并且在子节点和root用户中都完成了,因此两个进程都将进行fork,因此:

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

这就是你的照片 (显然,不能真正预测3是否会在4之前产生,因此4可能是第二个根孩子,而3可能是2的孩子)