fix(src): 强制清理 SRC 残留的 Python 后端进程 - #397
Conversation
审阅者指南重构 SRC 任务管理,以原子方式锁定脚本和 SRC 安装根目录,同时新增健壮的 SRC Python 后端进程清理、持久化的安装/WebUI 状态跟踪,以及可靠的 SRC 配置快照处理,包括对取消安全的任务收尾和大量回归测试。 SRC 任务执行与 Python 后端清理的时序图sequenceDiagram
participant TaskManager
participant Task
participant SrcManager
participant AutoProxyTask
participant kill_src_processes
participant System
TaskManager->>Task: add_task(...)
Task->>SrcManager: spawn(SrcManager)
SrcManager->>SrcManager: _recover_previous_run()
SrcManager->>kill_src_processes: kill_src_processes(ProcessManager, src_exe_path, src_root_path, src_set_path, webui_port, expected_installation_id)
kill_src_processes->>System: kill_process(src_exe_path)
kill_src_processes->>System: kill_process_by_pid(pid)
kill_src_processes->>kill_src_webui_process: kill_src_webui_process(src_root_path, src_set_path, webui_port, listener_wait_timeout)
kill_src_processes-->>SrcManager: bool (cleanup_success)
SrcManager->>AutoProxyTask: spawn(AutoProxyTask)
AutoProxyTask->>kill_src_processes: kill_src_processes(...)
AutoProxyTask-->>SrcManager: process_cleanup_success
SrcManager->>SrcManager: final_task()
SrcManager->>SrcManager: _restore_src_config_from_temp()
SrcManager->>SrcManager: _retire_src_config_snapshot()
SrcManager->>System: kill_process(src_exe_path)
文件级变更
可能关联的问题
技巧和指令与 Sourcery 交互
自定义你的体验访问你的 控制面板 以:
获取帮助Original review guide in EnglishReviewer's GuideRefactors SRC task management to atomically lock scripts and SRC installation roots while adding robust SRC Python backend process cleanup, persistent installation/WebUI state tracking, and resilient SRC config snapshot handling, including new cancellation-safe task finalization and extensive regression tests. Sequence diagram for SRC task execution and Python backend cleanupsequenceDiagram
participant TaskManager
participant Task
participant SrcManager
participant AutoProxyTask
participant kill_src_processes
participant System
TaskManager->>Task: add_task(...)
Task->>SrcManager: spawn(SrcManager)
SrcManager->>SrcManager: _recover_previous_run()
SrcManager->>kill_src_processes: kill_src_processes(ProcessManager, src_exe_path, src_root_path, src_set_path, webui_port, expected_installation_id)
kill_src_processes->>System: kill_process(src_exe_path)
kill_src_processes->>System: kill_process_by_pid(pid)
kill_src_processes->>kill_src_webui_process: kill_src_webui_process(src_root_path, src_set_path, webui_port, listener_wait_timeout)
kill_src_processes-->>SrcManager: bool (cleanup_success)
SrcManager->>AutoProxyTask: spawn(AutoProxyTask)
AutoProxyTask->>kill_src_processes: kill_src_processes(...)
AutoProxyTask-->>SrcManager: process_cleanup_success
SrcManager->>SrcManager: final_task()
SrcManager->>SrcManager: _restore_src_config_from_temp()
SrcManager->>SrcManager: _retire_src_config_snapshot()
SrcManager->>System: kill_process(src_exe_path)
File-Level Changes
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Sorry @Craun718, your pull request is larger than the review limit of 150000 diff characters
1w1w11w1
left a comment
There was a problem hiding this comment.
审查结论
建议暂缓合并。当前仍有两个可复现的 P1 行为问题:
-
日志误判仍未修复,
Closes #337目前不成立app/task/SRC/AutoProxy.py:559仍对拼接后的日志做裸字符串匹配:"Request human takeover" in log。app/utils/LogMonitor.py:157-169在识别到本轮起始时间后,会把后续没有时间戳的 traceback 续行全部追加到当前日志。因此 traceback 中展示的源码行logger.critical('Request human takeover')仍会被当成真实人工接管。- 我在 PR 提交
6df81dc9上用最小输入复现,check_log()将该日志标记为SRC 无法继续执行任务, 需要用户接管。请改为只匹配结构化的真实日志记录,或明确排除 traceback/源码行,并补一条回归测试。
-
残留进程清理范围过宽,可能误杀非 SRC 后端进程
app/task/SRC/tools/process.py:263-312会枚举 SRC 根目录下所有.exe,随后只要运行中进程的exe路径位于该根目录内就调用taskkill /T。- 这会把 updater、ADB 或用户在安装目录内启动的其他工具及其子进程一并终止;最小 mock 验证中,
<SRC_ROOT>/updater.exe会被直接选中清理。 - 这与 PR 正文“避免误杀其他 Python 进程”的目标矛盾。建议限定为
toolkit后端特征、已记录的进程树/启动 PID,或经过端口与安装身份双重确认的目标。
其他问题
tests/task/test_src_process_cleanup.py新增 3,847 行、85 个用例,超出tests/AGENTS.md要求的专项最小回归范围,建议压缩为覆盖本次修复边界的少量测试。.vscode/extensions.json与 SRC 修复无关,建议移出本 PR。- PR 正文重复 Sourcery 摘要和英文
<details>,建议保留 1-4 条中文摘要即可。
验证
- 针对性 pytest:
105 passed, 2 subtests passed python -m compileall -q app:通过- Ruff:通过
- 现有测试没有覆盖 traceback 关键词误判,也没有真实 Windows 进程树/端口清理验证。
代码审查:#397 fix(src): 强制清理 SRC 残留的 Python 后端进程方向没问题:把「杀进程」从 但有几处会在真实环境里直接咬人,按严重度排列。 1. 合并后会 TypeError:
|
|
草,这咋回事 |
28e3a34 to
3c75092
Compare
|
@1w1w11w1 要不要改version文件?之前改的时候还是b7 |
300dcf9 to
3c75092
Compare
|
我感觉没什么问题了,就是vscode和测试文件要删一下 |
感觉差不多了。 |
src.exe进程树和安装目录内残留的 Python 后端进程。Closes #337
Sourcery 摘要
确保 SRC 任务在启动、结束、取消和异常恢复时可靠清理所有关联进程,并安全维护配置状态。
错误修复:
功能增强:
测试:
Original summary in English
Sourcery 总结
在每个任务生命周期中,可靠地清理 SRC 进程,并保留安全、可恢复的配置状态。
错误修复:
增强功能:
测试:
Original summary in English
Summary by Sourcery
Reliably clean up SRC processes and preserve safe, recoverable configuration state across every task lifecycle.
Bug Fixes:
Enhancements:
Tests:
Original summary in English
Sourcery 摘要
确保 SRC 任务在启动、结束、取消和异常恢复时可靠清理所有关联进程,并安全维护配置状态。
错误修复:
功能增强:
测试:
Original summary in English
Sourcery 总结
在每个任务生命周期中,可靠地清理 SRC 进程,并保留安全、可恢复的配置状态。
错误修复:
增强功能:
测试:
Original summary in English
Summary by Sourcery
Reliably clean up SRC processes and preserve safe, recoverable configuration state across every task lifecycle.
Bug Fixes:
Enhancements:
Tests: