LocalSubprocessDeployer.deploy 中:
LocalSubprocessDeployer.deploy
log_fp = open(log_file, "a")
Popen(stdout=log_fp, stderr=log_fp)
log_fp
Popen
process
self._processes
stop()
process.terminate()
get_status()
management/openjiuwen_runtime/management/deployments/subprocess/deployer.py 第 198-214 行
management/openjiuwen_runtime/management/deployments/subprocess/deployer.py
try/finally
self._processes[deployment_id] = process
Hey @gp1000 , 感谢你对社区的贡献.
有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。
缺陷描述
LocalSubprocessDeployer.deploy中:log_fp = open(log_file, "a")后交给Popen(stdout=log_fp, stderr=log_fp),成功路径下父进程始终不关闭log_fp(只有“进程已退出”的分支第 214 行才关闭),每次成功部署泄漏一个文件句柄;Popen返回的process没有写入self._processes,导致stop()无法走process.terminate()优雅停止分支(只能回退到按 PID 强杀),get_status()也无法使用进程对象。影响
文件位置
management/openjiuwen_runtime/management/deployments/subprocess/deployer.py第 198-214 行修复建议
Popen后用try/finally关闭父进程的log_fp(子进程已继承句柄);self._processes[deployment_id] = process;self._processes中清理。