子进程退出时需要僵尸状态,僵尸状态下保存退出值,直到其父进程调用wait()
。
但是为什么不在子进程退出时立即在父进程描述符中保存该退出值并立即释放子资源?
比如说我们在进程描述符中添加一堆子进程的退出值。
答案 0 :(得分:2)
带叉子的钥匙 - >等待模型并不是说你可以获得退出状态(以及其他一些信息),但是在你等待它之前,进程的pid会一直保持使用状态。这意味着你可以确信没有其他人会突然分叉并获得相同的pid,这在某些情况下具有很大的价值。
僵尸本身真的不吃多少。所有重量都是长期释放的,并且出于实际目的,您可以假设开销归结为描述进程的结构和标记为已使用的pid表中的插槽。答案 1 :(得分:0)
当进程通过exit,所有内存和资源结束时 与之相关联的内容已被解除分配,因此可供其他人使用 流程。但是,进程表中的进程仍然存在。
所以这里没有资源问题。现在回答你的问题,
为什么不在父进程描述符中保存该退出值 孩子退出
原因是孩子无法访问/修改父进程描述符。它只能与父母沟通。
因此,孩子向父母发送myFunc
,并由父母来处理信号。