已开启
[Bug] 子进程部署器未关闭日志句柄且未登记进程,导致 fd 泄漏与状态误判 #158
zhangzj创建于  9月23日
zhangzj
zhangzj
9月23日 创建

缺陷描述

LocalSubprocessDeployer.deploy 中:

  1. log_fp = open(log_file, "a") 后交给 Popen(stdout=log_fp, stderr=log_fp),成功路径下父进程始终不关闭 log_fp(只有“进程已退出”的分支第 214 行才关闭),每次成功部署泄漏一个文件句柄;
  2. Popen 返回的 process 没有写入 self._processes,导致 stop() 无法走 process.terminate() 优雅停止分支(只能回退到按 PID 强杀),get_status() 也无法使用进程对象。

影响

  • 长时间运行/多次部署后文件描述符耗尽
  • 无法优雅停止 Agent;PID 被复用时有误杀风险
  • 进程状态判断只能依赖 PID 扫描

文件位置

management/openjiuwen_runtime/management/deployments/subprocess/deployer.py 第 198-214 行

修复建议

  • Popen 后用 try/finally 关闭父进程的 log_fp(子进程已继承句柄);
  • 成功启动后登记 self._processes[deployment_id] = process;
  • 进程启动即退出时从 self._processes 中清理。
likedislike
zhangzjzhangzj
9月23日 添加了label:bug
openJiuwen-bot成员
9月23日 评论:

欢迎来到 openJiuwen 社区

Hey @gp1000 , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
zhangzjzhangzj
9月23日 关联了pull request:fix: 补充子进程超时、修复部署器 fd 泄漏与 CLI 资源清理