c - 跟踪程序逻辑时遇到问题,包括 Fork()

标签 c fork zombie-process

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

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

enter image description here

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

enter image description here

最佳答案

有 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/

相关文章:

c - 如何使 valgrind 仅报告与规则匹配的错误

c - 树莓派3裸机: unexpected behaviour from arrays and switch statements

c - C中父进程退出时杀死子进程

r - 如何阻止 R 离开僵尸进程

c - Fscanf 得到的值错误

使用 fork() 的并发进程

c - fork 没有在母亲身上显示 child 的 pid

linux - 为什么需要僵尸进程?

iphone - NSZombieEnabled 不报告导致 EXC_BAD_ACCESS 错误的对象类型

C 语言 - 将解决方案存储到输出文件中 - 防止下一行之前出现空格字符