最近做了一个进程监控的小工具,网上找了下关于进程监控的第三方库,使用https://github.com/shirou/gopsutil 库的比较多。
于是使用了mod github.com/shirou/gopsutil v3.20.11+incompatible的版本进行开发
现象
开发完之后在本地机器(windows 7)测试了下都ok。部署完之后就没管了,今天发现一台windows 2003的机器进程运行异常了。上去看了下日志发现一直在报access is denied。
首先想到的是进程权限不够,但是后来想想进程已经注册为系统服务了应该是以SYSTEM权限运行,并且使用Administrator调试后还是不行。思考是否为代码问题。
原因
调试代码并查阅Windows相关文档后发现我使用的gopsutil版本中,openProcess()方法是用的权限为windows.PROCESS_QUERY_LIMITED_INFORMATION,在Windows xp和2003 版本并不支持这个权限。必须用 windows.PROCESS_QUERY_INFORMATION进行查询。
解决方案
翻看了gopsutil 库的issue看到前几天刚好有个xp系统也有差不多的问题,更新了下最新的的代码。问题解决!
代码中修改的内容是两个权限都加入进去
[process][windows] Fix #714 call OpenProcess with PROCESS_QUERY_INFORMATION on WinXP #1045
h, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, uint32(pid))
cons

在使用 gopsutil v3.20.11+incompatible 开发进程监控工具时,部署到 Windows 2003 服务器上出现 'access is denied' 错误。原因是 gopsutil 中的 openProcess() 方法在 Windows XP 和 2003 上不支持 PROCESS_QUERY_LIMITED_INFORMATION 权限,需要改为使用 PROCESS_QUERY_INFORMATION。通过更新 gopsutil 代码,同时包含两种权限,问题得到解决。
最低0.47元/天 解锁文章
5099

被折叠的 条评论
为什么被折叠?



