go语言如何获取Windows进程所占用的cpu?

新手上路,请多包涵

使用 wmi 可行否?有尝试使用:

package main

import (
    "fmt"
    "github.com/StackExchange/wmi"
    "log"
    "time"
)

type Win32_Process struct {
    Name                 string
    TimeStamp_Sys100NS   uint64
    PercentProcessorTime uint64
}

func main() {
    var dst []Win32_Process

    var N1 uint64 = 0
    var D1 uint64 = 0

    for ; ; time.Sleep(time.Second) {
        str := "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE Name = 'cpu-test'"
        err := wmi.Query(str, &dst)
        if err != nil {
            log.Fatal(err)
        }

        N2 := dst[0].PercentProcessorTime
        D2 := dst[0].TimeStamp_Sys100NS

        // D1/D2 一直是0
        fmt.Println(D1, D2, N1, N2)

        N1 = dst[0].PercentProcessorTime
        D1 = dst[0].TimeStamp_Sys100NS
    }
}

好像说这两个值可以计算CPU占用率?可是要怎么算呢?

阅读 5.1k
2 个回答
✓ 已被采纳新手上路,请多包涵
package main

import "github.com/shirou/gopsutil/process"

func main() {
    for {
        p1, _ := process.NewProcess(110)
        t1, _ := p1.Times()
        
        time.Sleep(time.Second * 2)
        
        p2, _ := process.NewProcess(110)
        t2, _ := p2.Times()
        
        // CPU使用比例 = 在间隔时间内进程的CPU使用时间 / 计算机逻辑CPU数量
        cpu := (t2.Total() - t1.Total()) / 2 / float64(runtime.NumCPU()) * 100
    }
}

返回的错误需要自己处理一下,这里为了演示方便不进行处理了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题