fix(src): 强制清理 SRC 残留的 Python 后端进程 - #397
Open
Craun718 wants to merge 4 commits into
Open
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
|
Craun718
marked this pull request as ready for review
August 21, 2026 06:05
There was a problem hiding this comment.
Sorry @Craun718, your pull request is larger than the review limit of 150000 diff characters
1w1w11w1
reviewed
Aug 22, 2026
1w1w11w1
left a comment
Contributor
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 进程树/端口清理验证。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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: