Zephyr v2.3.9 — 孤儿进程防护、系统代理守卫、订阅下载三级回退
mihomo 孤儿进程防护(Windows Job Object / Unix PR_SET_PDEATHSIG);系统代理所有权守卫防止外部篡改;订阅下载新增第三级回退(临时切换 global 模式);一键复制代理环境变量(5 种 Shell 格式);每订阅 User-Agent 覆盖;设置页面重构为 9 个意图区块。
新功能
孤儿进程防护
防止 mihomo 在 Zephyr 意外退出(包括任务管理器强制结束、崩溃)后成为孤儿进程占用端口。
系统代理所有权守卫
防止外部程序篡改 Zephyr 设置的系统代理。
代理环境变量复制
一键复制当前代理的环境变量到剪贴板,方便在终端中快速配置代理。
每订阅 User-Agent 覆盖
每个订阅可单独设置 User-Agent,覆盖全局 subscription_user_agent。
Override 脚本失败指示
Override 脚本执行失败时,状态指示器从绿色变为红色,显示"失败"状态文本,便于快速定位问题。
窗口隐藏时暂停渲染
窗口隐藏或最小化时暂停连接列表轮询和流量图表渲染,可见时自动恢复,减少后台资源消耗。
设置页面重构
设置页面从扁平列表重构为 9 个意图区块(General、Proxy、TUN、Network、Security、Updates、Shortcuts、Advanced、About),提升信息密度和导航效率。
订阅下载三级回退
订阅下载失败时,依次尝试三种策略,最大限度提高下载成功率:
配置回退自动纠正
启动核心时如果请求的配置文件不存在,会静默回退到第一个可用配置。现在自动检测这种回退并纠正 last_config,避免下次冷启动仍然指向已删除的文件。
删除配置时悬空指针清理
删除配置后检查 last_config 是否指向已删除的文件,如果是则重置为第一个可用配置。使用两段锁模式避免 TOCTOU 竞态。
Bug 修复
- 订阅更新后强制重启核心:订阅内容变更后通过
force: true参数强制重启 mihomo 使新配置生效 - 订阅下载超时缩短:连接超时从 30s→5s,总超时从 30s→10s,避免长时间阻塞
- 代理节点列表竞态条件:修复订阅切换后代理节点列表可能显示旧数据的问题
- JS Override YAML 键顺序:
serde_json启用preserve_orderfeature,JavaScript override pipeline 现在保持 YAML 键的原始插入顺序 - Prism YAML Override 配置切换:切换配置时
override_apply_all自动重新应用所有 Prism YAML 类型 override(先于 JS override 执行,批量编译:single compile → single write → single reload) - TUN toggle cleanup:合并到 finally 块,确保异常路径也能正确清理
- deep-link.js 缺失 type import:修复深链处理模块中缺失的类型导入