我想以编程方式 [在 C 中] 计算 Linux 中给定进程 ID 的 CPU 使用率。
我们如何获得给定进程的实时 CPU 使用百分比?
为了进一步明确:
- 我应该能够确定提供的 processid 或进程的 CPU 使用率。
- 该进程不必是子进程。
- 我想要’C’语言的解决方案。
原文由 codingfreak 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想以编程方式 [在 C 中] 计算 Linux 中给定进程 ID 的 CPU 使用率。
我们如何获得给定进程的实时 CPU 使用百分比?
为了进一步明确:
原文由 codingfreak 发布,翻译遵循 CC BY-SA 4.0 许可协议
getrusage() 可以帮助您确定当前进程或其子进程的使用情况
更新: 我不记得 API。但是所有细节都在 /proc/ PID /stat 中,所以如果我们可以解析它,我们就可以得到百分比。
编辑: 由于 CPU % 不能直接计算,您可以在这里使用采样类型的东西。在某个时间点读取 PID 的 ctime 和 utime 并在 1 秒后再次读取相同的值。找出差异并除以百。您将在过去一秒钟内获得该过程的利用率。
(如果有很多处理器可能会变得更复杂)
原文由 vpram86 发布,翻译遵循 CC BY-SA 2.5 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
1 回答3.3k 阅读
2 回答3.2k 阅读
您需要从
/proc/<PID>/stat
中解析出数据。这些是前几个字段(来自内核源代码中的Documentation/filesystems/proc.txt
):您可能在
utime
和/或stime
。您还需要阅读 --- 中的/proc/stat
cpu
行,如下所示:这会告诉您在各种类别中使用的累积 CPU 时间,以 jiffies 为单位。您需要取此行上的值的总和以获得
time_total
测量值。阅读
utime
和stime
以了解您感兴趣的过程,并阅读time_total
来自/proc/stat
然后睡一秒钟左右,然后再读一遍。您现在可以计算采样时间内进程的 CPU 使用率,其中:说得通?