mirror of
https://github.com/shy3130/tick-stock-panel.git
synced 2026-11-02 10:26:13 +00:00
用户反馈: 挖掘工作台一直提示「挖掘锁被其他进程占用 — 锁文件为旧格式, 无法定位持有进程」(v0.3.17+ fail-closed 设计)。根因: 锁内容是 v0.2 时代 写入的 b"0" (无 pid), 持有者为升级前启动、仍在运行的旧版后端残留进程; flock 是 OS 级锁, 进程存活即一直占用, 旧版本无法被识别 → 强制释放按钮 永不出现, 用户只能去任务管理器逐个猜进程。 - mining_process_lock: 新增 locate_lock_holder_pid — 锁内容不可读时用 lsof (POSIX) / psutil (跨平台兜底) 反查打开锁文件的进程; 只认本产品 形态 (python/uvicorn/desktop/tickflow), 且连续两次扫描命中才采信, 避免误杀瞬时探测或无关进程 (误杀是破坏性操作, 宁可定位失败) - mining_lock_admin.lock_status: 旧格式锁 → OS 反查持有者, 继续走既有 fail-closed 判定 (无进行中挖掘 + 存储静默 >=600s 才允许释放); 状态新增 holder_source 字段 - 前端横幅: 展示「已通过系统扫描定位」并出现既有「强制停止并接管」按钮; 定位失败时保留手动指引 - 设计纪律不变: 仍只提供人工确认的强制释放, 不做启动自动 kill 验证: 新增 4 条用例 (旧格式持锁进程定位 / 强制释放完整接管 / 挖掘活跃时 仍拒绝 fail-closed / 锁空闲不误报); 撤销集成时 3 条红, 恢复后绿; 后端全量 3540 passed; 前端 build + tsc 通过。 Signed-off-by: shy3130 <shy3130@qq.com>