getrusage与clock_gettime()

Dil*_*Geo 5 getrusage

我试图获取Ubuntu上进程消耗的CPU时间.据我所知,有两个函数可以完成这项工作:getrusage()和clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&tp).在我的代码中,在clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&tp)之后立即调用getrusage(),总是会得到不同的结果.

谁能帮助我了解哪个功能提供更高的分辨率,以及这些功能有哪些优点/缺点?

谢谢.

Cam*_*ron 0

得到鲁萨奇(...)

  • 将 CPU 时间分别划分为ru_utime 和 ru_stime 中的系统部分和用户部分。
  • 大致微秒分辨率: struct timeval 具有字段 tv_usec,但此分辨率通常限制为约 4ms/250Hz (来源)
  • 可在 SVr4、4.3BSD、POSIX.1-2001 上使用:这意味着它在 Linux 和 OS X 上都可用

请参阅手册页


Clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)

  • 系统时间和用户时间的总和,无法将其分成系统/用户时间部分。
  • 纳秒分辨率: struct timespec 是 struct timeval 的克隆,但使用 tv_nsec 而不是 tv_usec。确切的分辨率取决于计时器在给定系统上的实现方式,并且可以使用clock_getres进行查询。
  • 需要您链接到 librt
  • 时钟可能不可用。在这种情况下,clock_gettime 将返回 -1 并将 errno 设置为 EINVAL,因此最好提供 getrusage 后备。(来源)
  • 在 SUSv2 和 POSIX.1-2001 上可用:这意味着它在 Linux 上可用,但在 OS X 上不可用。

请参阅手册页