已开启
fix(init_cmds): syncexec/DumpFdInfo waitpid 增加超时 (高-6) #4964
fix(init_cmds): syncexec/DumpFdInfo waitpid 增加超时 (高-6) #4964
已开启
chenjinxiang3创建于 27 天前
chenjinxiang3
chenjinxiang3成员
27 天前

背景

startup_init 稳定性 13 项高危之一(高-6),单独上库以便快速评审合入。完整集见 PR #4948,快赢子集见 PR #4960。

  • 依据:startup_init_stability_analysis.md(高-6)、startup_init_test_recommendation.md。

问题

services/init/standard/init_cmds.c 的 SyncExecCommand(cfg syncexec 命令)与 DumpFdInfo 中 waitpid(pid, &status, 0) 无超时。syncexec 是 init.cfg 可配置命令,异常/恶意子进程挂起即冻结 PID 1(服务拉起/SIGCHLD 收尸/参数服务全停)。违反 AGENTS.md §3.2"阻塞 exec 需带超时"。

修复

新增 file-static WaitPidTimeout(pid, timeoutMs)(WNOHANG 轮询 100ms,超时 SIGKILL+收尸,返 -1):

  • SyncExecCommand:SYNC_EXEC_TIMEOUT_MS = 30000(30s)
  • DumpFdInfo:FD_DUMP_TIMEOUT_MS = 5000(5s)

超时即强杀收尸(无僵尸),调用方返错而非阻塞。

行为变更

  • 正常(子进程速退):无变化。
  • 异常(子进程挂起):init 不再冻结;超时后 SIGKILL+返错,主循环继续。

验证

  • ninja -C out/rk3568 init → LINK startup/init/init,0 error,0 warning。
  • WaitPidTimeout 为 file-static,主机单测不可直达;设备验证:cfg 加 syncexec sleep 999 → init 30s 内返回非 0、不冻结。
  • 回归:含 syncexec 的正常 cfg 命令返回正确退出码。

Signed-off-by: chenjinxiang3 chenjinxiang3@huawei.com

likedislike
合并受阻
openharmony_ciopenharmony_ci成员
27 天前 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
27 天前 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
chenjinxiang3chenjinxiang3成员
27 天前 关联了issue:startup_init 稳定性修复:PID 1 冻结/堆破坏/崩溃恢复(高-1~高-11,高-13 + P2 11项)
openharmony_ciopenharmony_ci成员
27 天前 添加了label:dco检查成功
openharmony_dcp
openharmony_dcp成员
2 天前 评论:

您好, @chenjinxiang3 该PR需要您响应,已过去25天未响应,请根据检视意见进行修改,如5天内未响应检视意见,此PR会被自动关闭。关闭后的PR,如有需要,您可以自行打开该PR。

likedislike