问题: main.rs Ctrl+C handler 只置 AtomicBool, 但 manager.run() 阻塞在 rx.recv() 永久等待下一条消息, 导致 Ctrl+C 后需等任意消息到达才能退出. CLAUDE.md:162 记录的已知 P1 隐患 (王浩然发现). 修复 (3 处): 1. service_manager.rs run(): recv() -> recv_timeout(200ms), 超时则 continue 重新检查 self.running, 确保信号能被及时响应 2. service_manager.rs handle_manager_message(): Shutdown 分支广播后 置 self.running=false, 让主循环正常退出 (原本只广播不停机) 3. main.rs Ctrl+C handler: 除置 AtomicBool 外, 向 channel 注入 Message::Shutdown envelope, 唤醒 recv_timeout 并触发优雅停机 效果: Ctrl+C 后最多 200ms 退出, 而非等待下一条任意消息. 注: Windows 开发环境缺 pkg-config/libdbus, 无法本地 cargo check; 改动经 rust-analyzer 类型检查零诊断, 待目标机 (Linux ARM64) 验证.
4.8 KiB
4.8 KiB