C++ 如何找到进程的空闲时间

C++ 如何找到进程的空闲时间,c++,getrusage,C++,Getrusage,我有一个过程,在早期版本中需要一些时间。 现在,当前版本中的相同过程需要更多的时间。但与之前相比,代码没有任何变化。我看到的一个观察结果是,与早期版本相比,服务器上还有一些其他进程消耗了大量cpu。所以我怀疑我的进程没有得到cpu时间,这就是为什么它需要更多的时间。 但我需要证明,进程在大部分时间都在等待(空闲)。 为此,我考虑使用getrusage()。但是我不确定如何使用它来计算进程空闲时间。 有谁能告诉我一个简单的例子,如何使用getrusage专门计算进程的空闲时间 提前感谢。您可以计算

我有一个过程,在早期版本中需要一些时间。 现在,当前版本中的相同过程需要更多的时间。但与之前相比,代码没有任何变化。我看到的一个观察结果是,与早期版本相比,服务器上还有一些其他进程消耗了大量cpu。所以我怀疑我的进程没有得到cpu时间,这就是为什么它需要更多的时间。 但我需要证明,进程在大部分时间都在等待(空闲)。 为此,我考虑使用
getrusage()
。但是我不确定如何使用它来计算进程空闲时间。 有谁能告诉我一个简单的例子,如何使用
getrusage
专门计算进程的空闲时间


提前感谢。

您可以计算进程的执行时间,而不是计算进程空闲时间,并从挂钟时间中减少执行时间

在符合较新POSIX标准(阅读Linux)的操作系统中,您可以使用以下功能轻松完成此操作:

实时时钟
全系统实时时钟

时钟进程\u CPUTIME\u ID
来自CPU的高分辨率每进程计时器

时钟线程\u CPUTIME\u ID
线程特定的CPU时间时钟

您可以使用
CLOCK\u REALTIME
获取挂钟时间,并获取程序开始和结束时返回的时间之间的差值,以了解程序运行所需的时间(包括空闲时间)。使用
CLOCK\u PROCESS\u CPUTIME\u ID
,您可以以类似的方式精确测量进程在CPU上运行的时间。使用
CLOCK\u THREAD\u CPUTIME\u ID
甚至可以分别获得每个线程的执行时间

注意:如果进程/线程从一个CPU迁移到另一个CPU,则
时钟*\u CPUTIME\u ID
可能会变得不一致。记住这一点。如果确实发生这种情况,您可以尝试将进程或其线程绑定到特定的CPU

作为旁注,它提供了进程执行时间的信息,因此,如果挂钟时间足够大,可以用手表来测量,那么您也可以使用此工具

注意:别忘了链接到
-lrt