通过PID获取进程的CPU使用率(顶级源代码)

Vla*_*lad 5 macos cpu pid

如果我只知道PID,如何获得进程的CPU使用率?MAXOS X.

我查看了MACOSX的顶级实用程序源代码,我在libtop.c中找到了几个重要的函数

/* Iterate through all processes and update their statistics. */
libtop_p_proc_table_read(boolean_t reg)

libtop_p_task_update() 

/* Get CPU usage statistics.    */
libtop_pinfo_update_cpu_usage() 
Run Code Online (Sandbox Code Playgroud)

问题是我不明白他们如何从这个巨大的MACOS特定"mach内核"系统调用获得%CPU使用率.有人有解决方案吗?

我的源代码是system_time,user_time,total_time.
我total_time是从流程开始的时间还是什么?或者也可以是total_time等于1秒.

例如我的结果:对于Opera浏览器:

pid:1214用户:653.517582sec系统:193.597306sec总计:847.114888sec

来自顶级实用程序的正确信息:

PID命令%CPU时间
1214- Opera 8.0 14:04.52

我不明白如何将我的结果转换为8.0%.这里的总时间是用户时间和系统时间的总和.总时间是正确的:847秒约为14分04秒为了获得cpu使用百分比,我需要一些像所有进程的空闲时间.

我已经花了一整天但没有任何进展.

小智 2

从这些函数中获得的时间是该进程使用 cpu 的时间。

你应该考虑到cpu一次只能被一个进程使用(忽略多核cpu)。

因此,要获得百分比值,您必须第一次询问,然后等待,最后询问第二次。

%CPU = (TIME2 - TIME1)/Waited_time;

如果你等一秒钟,你就已经拥有了好的 %CPU

如果您有多个 CPU,则可能需要除以 cpu 数量/每个 cpu 的核心数