Process 僵尸状态进程在Linux中真的有必要吗?

Process 僵尸状态进程在Linux中真的有必要吗?,process,linux-kernel,kernel,Process,Linux Kernel,Kernel,当子进程退出时,需要“僵尸”状态,在“僵尸”状态下,其退出值将保存,直到其父进程调用wait() 但为什么不在子进程退出时将该退出值保存在父进程描述符中,并立即完全释放子进程的资源呢 比如说,我们向进程描述符中添加了其子进程的退出值堆栈 fork->wait模型的关键不是您可以获得退出状态(以及其他一些信息),而是流程的pid一直保持使用,直到您等待它。这意味着您可以确信没有其他人会突然分叉并获得相同的pid,这在某些情况下具有很大的价值 僵尸本身真的吃得不多。所有重量级的内容都被长期释放,出于

当子进程退出时,需要“僵尸”状态,在“僵尸”状态下,其退出值将保存,直到其父进程调用
wait()

但为什么不在子进程退出时将该退出值保存在父进程描述符中,并立即完全释放子进程的资源呢


比如说,我们向进程描述符中添加了其子进程的退出值堆栈

fork->wait模型的关键不是您可以获得退出状态(以及其他一些信息),而是流程的pid一直保持使用,直到您等待它。这意味着您可以确信没有其他人会突然分叉并获得相同的pid,这在某些情况下具有很大的价值

僵尸本身真的吃得不多。所有重量级的内容都被长期释放,出于实际目的,您可以假设开销归结为描述流程的结构和pid表中标记为已使用的插槽。

来自:

当进程通过exit结束时,所有内存和资源 与之关联的数据被解除分配,以便其他用户可以使用它们 过程。但是,流程表中的流程条目仍然保留

所以这里没有资源问题。现在来问你的问题

为什么不将退出值保存在父进程描述符中 孩子走了

原因是子进程无法访问/修改父进程描述符。它只能与父级通信

因此,子系统向父系统发送一个
SIGCHLD
,由父系统处理该信号