二是"托盘图标跑一段时间就失灵"。原因是托盘消息循环跑在普通 goroutine 里,而 Windows 会把窗口消息投递到创建窗口的那个线程;goroutine 一旦被调度器迁移到别的系统线程,就取到了错误线程的消息队列。修复方式是在 Windows 分支给消息循环加上 runtime.LockOSThread(),把它钉在拥有窗口的线程上。
• 顺带还有一处不容易察觉的修复: Windows 下守护进程的控制台输出按系统代码页(简体中文是 GBK)编码,重定向到管道后成了乱码,现在统一解码为 UTF-8 再落盘。
历史功能巡礼
对于刚认识 ProcHub 的读者,这几个此前的功能也值得一看。
• 托盘交互与退出保护(v0.6.0):** Windows 下单击托盘图标直接唤出主界面,右键才弹菜单;如果还有进程在跑,退出会被拦下并列出是哪几个进程没停,避免误关。
如果你手上也有一堆后台进程需要盯着,可以升级到 v0.7.0,在终端敲一条 prochub process logs ID --follow 试试。项目仓库在 github.com/modstart-lib/prochub。你平时最希望哪个操作能写进脚本?欢迎来评论区聊聊。把重复的操作交给脚本,省下的是每天的时间。