鸿蒙综合讨论/孤儿进程回收

孤儿进程回收

多进程架构(隔离设计、fork 守护)的特有课题:子进程死得不干净会留孤儿,孤儿积累成资源黑洞。这篇讲回收机制。

▍孤儿与僵尸
两种遗留形态:孤儿(父进程死了子进程还活)、僵尸(子进程死了父进程没收尸——进程表项挂着)。症状:设备进程列表里应用进程数异常、内存占用 accumulates、新 fork 失败(进程数限额)。多进程应用的长期运行场景(虚拟机、守护型核心)必踩。

▍回收的设计
父进程侧:等待机制(子进程退出事件立即收尸——专用等待线程或就绪回调,别攒);注册表(每个子进程的角色、启动时间、健康状态一张表——回收与重启都按表操作)。子进程侧:父进程死亡的感知(父进程不在了主动退出,别成孤儿干活——守护方向的感知通道按平台机制做)。双向的心跳(互相知道对方活着,一方死亡另一方按策略处理)。

▍应用生命周期的对齐
应用被系统杀死(回收篇的场景):系统杀的是主进程,子进程的处置要设计——随主进程退出(推荐:子进程检测主进程死亡即退)还是转独立存活(特殊场景,要显式声明与治理)。应用正常退出:优雅序列(通知子进程收尾、限时等待、强杀兜底——退出清理的顺序纪律)。

▍检测与运维
运行时自检:定期核对子进程表(该在的在、该退的退);设备侧排查:进程树查看(应用的进程族形态是否正常)。诊断包里带上进程表快照——用户报障时先看进程形态。

▍真实场景参照
Air 系列的虚拟机工程(子进程跑完整虚拟机)对进程治理的要求最重:快照、恢复、崩溃重启、资源回收的整套时序在实录里有详细记录。它的经验一句话:进程治理的设计要在架构期做,运行期补丁式的回收救不了已经泄漏的进程。

▍验收
反复启停压测(一百次启动退出,进程表零残留);主进程被杀场景的子进程归宿符合设计;长时间运行(数小时)进程数稳定。

有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。