我知道在这个问题上存在优秀的答案:
问题在于我尝试使用libproc.h
来定义proc_threadinfo
结构(以及其他),但字段pth_cpu_usage
始终是0
(请参阅trheadInfoHandler()
func here了解我如何使用Go中的结构。
查看Chromium来源here的片段(不使用libproc.h
),我想知道是否使用proc_threadinfo
和proc_taskinfo
中的字段可以计算cpu百分比的使用情况。
proc_threadinfo.pth_user_time; /* user run time */
proc_threadinfo.pth_system_time; /* system run time */
proc_taskinfo.pti_total_user; /* total time */
proc_taskinfo.pti_total_system;
修改
一些伪代码说明正确的算法或建议让我走上正确的道路将非常感激。
使用/proc
文件系统我认为我能够计算 Linux 中的CPU%使用率:
func cpuUsageOf(pid int, waitHandler func()) float32 {
stat1 := procFsStatOf(pid)
utime1 := stat1.utime // /proc/[pid]/stat field index 13
stime1 := stat1.stime // /proc/[pid]/stat field index 14
cputime1 := procFsCpuTimeTotal() // /proc/stat -> sum of cpu values
waitHandler() // here I wait 1 second
stat2 := procFsStatOf(pid)
utime2 := stat2.utime // /proc/[pid]/stat field index 13
stime2 := stat2.stime // /proc/[pid]/stat field index 14
cputime2 := procFsCpuTimeTotal() // /proc/stat -> sum of cpu values
return float32(cpuCount() * ((utime2 + stime2) - (utime1 + stime1)) * 100) / float32(cputime2 - cputime1)
}
对于 OS X ,我是否可以使用proc_threadinfo
或proc_taskinfo
中的值?我可以在哪里找到与我在/proc/stat
中使用procFsCpuTimeTotal()
)读取的Linux相同的值?
完整代码here(如在提交9e34d3c72bf853ff49ef3970ad6a6c9688e9ba23
中);快速链接到 OS X 代码here。