进程退出后为什么还会出现僵尸进程与孤儿进程,父进程应如何正确回收子进程
简答题中等692 次浏览
参考答案与解析
# 核心结论
僵尸进程不是仍在执行的进程,而是已经终止、仅保留少量退出信息并等待父进程读取的进程表项;孤儿进程则是父进程先退出,而子进程仍在运行,随后由系统中的收养者接管。二者的形成原因、资源影响和处理方式不同。父进程应通过 wait、waitpid 等接口回收已经结束的子进程;长期运行且会频繁创建子进程的服务,还必须正确处理 SIGCHLD,否则大量僵尸表项可能耗尽进程标识符或内核进程表容量。
# 底层机制
子进程调用 exit、从入口函数返回或被信号终止后,内核会释放其地址空间、打开文件等大部分运行资源,但仍需保存退出码、终止原因和资源使用统计,供父进程查询。在父进程取得这些信息前,子进程处于僵尸状
