Files
MyGoNavi/internal/nativewindow/parent_lifecycle.go
Syngnat b80989cb7b 🐛 fix(nativewindow): 修复主进程退出后子窗口残留
- 启动独立窗口时传递并校验主进程 PID
- 按平台监控父进程并在其退出后关闭子窗口
- 补充 PID 解析、真实父进程退出和异常探测回归测试
2026-07-27 08:43:12 +08:00

50 lines
753 B
Go

package nativewindow
import (
"context"
"time"
)
const defaultDetachedParentCheckInterval = time.Second
type detachedParentWatcher interface {
Alive() (bool, error)
Close() error
}
func monitorDetachedParent(
ctx context.Context,
watcher detachedParentWatcher,
interval time.Duration,
onParentExit func(),
) {
if watcher == nil {
return
}
defer watcher.Close()
if ctx == nil {
ctx = context.Background()
}
if interval <= 0 {
interval = defaultDetachedParentCheckInterval
}
for {
alive, err := watcher.Alive()
if err == nil && !alive {
if onParentExit != nil {
onParentExit()
}
return
}
timer := time.NewTimer(interval)
select {
case <-ctx.Done():
timer.Stop()
return
case <-timer.C:
}
}
}