我正在尝试创建一个 GO 程序,它可以使用任何进程名称(例如 calc.exe)并输出当前进程的总 RAM 使用率和 CPU 使用率。 我想要它用于 Windows 机器(但如果该解决方案也适用于 Linux 机器会更好 - 我怀疑相同的代码是否适用于两者)
我一直在尝试使用
syscall
来做,但它似乎对windows机器不是很有帮助。
在互联网上我发现
x/sys/windows
包可能有帮助。我已经尝试了给定的示例,但似乎该示例建议的类型和方法(我在下面的示例代码中显示了它)甚至不存在于库中。
` pid := 14768
// Open the process
handle, _ := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, false, uint32(pid))
defer syscall.CloseHandle(handle)
// Get the process's CPU usage
var cpuUsage float64
var creationTime, exitTime, kernelTime, userTime syscall.Filetime
err = syscall.GetProcessTimes(handle, &creationTime, &exitTime, &kernelTime, &userTime)
if err != nil {
fmt.Println("Error getting process CPU usage:", err)
return
}
cpuUsage = float64(kernelTime.Nanoseconds()+userTime.Nanoseconds()) / float64(1e7)
// Get the process's RAM usage
var pmc windows.PROCESS_MEMORY_COUNTERS
err = windows.GetProcessMemoryInfo(windows.Handle(handle), &pmc)
if err != nil {
fmt.Println("Error getting process RAM usage:", err)
return
}
ramUsage := pmc.WorkingSetSize`
请告诉我
windows.PROCESS_MEMORY_COUNTERS
和windows.GetProcessMemoryInfo
是未定义的。 (也从在线文档中验证)。我应该在这里做什么/使用什么来获取 RAM 使用量?