基本上是考试中的问题。他们要求针对以下问题绘制流程树。我希望有人愿意帮助并向我解释如何跟踪它
- a) 上面代码的输出-->下面我给出的图片
- b) 谁是第一个打印捕获信号的进程
- c)谁是第一个打印的进程准备就绪
- d) 如果我们删除 main() 中的信号函数会发生什么
- e)如果我们删除 sleep(2) 会发生什么
这是A的答案,我也不明白。
最佳答案
有 2 个 fork 调用,并且没有任何条件,因此我们最终必须有 4 个进程(这是您在图片上看到的第一件事)
具体发生了什么:
第一个根进程存在。
然后它 fork 所以我们有进程根 (1) 和子进程 (2) 然后,另一个对 fork 的调用发生,并且由于在子进程和根进程中都完成了该操作,因此两个进程都会 fork ,因此:
root - fork() ----------- fork() -----
\ \--- child (3)
\--child (2)-- fork() ------
\---- child (4)
这就是你照片上的内容 (显然,我们无法真正预测 3 是否会在 4 之前生成,因此 4 可能是第二个根子节点,3 是 2 的子节点)
关于c - 跟踪程序逻辑时遇到问题,包括 Fork(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724345/