Go 程序或 Go 标准库以了解任何给定进程的 RAM 和 CPU 使用情况

问题描述 投票:0回答:0

我正在尝试创建一个 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`

请告诉我

  • 如果正确获取 CPU 使用率
  • 我看错了
    windows.PROCESS_MEMORY_COUNTERS
    windows.GetProcessMemoryInfo
    是未定义的。 (也从在线文档中验证)。我应该在这里做什么/使用什么来获取 RAM 使用量?
go cpu ram
© www.soinside.com 2019 - 2024. All rights reserved.