Linux上是否可以通过调用clock_gettime来获取任意线程的CPU时间?

Linux上是否可以通过调用clock_gettime来获取任意线程的CPU时间?

如果我知道系统上运行的任意线程的 TID,我可以轻松计算其 pthread cpu 时钟 ID。但是我可以clock_gettime从我的程序中调用并获取它的 CPU 时间吗?我的实验表明这是不可能的,但我无法找到来源来证实这一点。

如果没有,有没有办法获得给定线程的高分辨率 CPU 时间?/proc/stat提供了该信息,但我想要比 jiffies 更准确的信息。

答案1

我的实验似乎表明,为跟踪每个线程的 CPU 时间而创建的时钟属于每进程时钟的类别,因此不易从其他进程内访问。这就是我用来得出这个结论的

#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>


int clockid(int tid) {
  return -(2 | (tid << 3));
}


int main(int argc, char ** argv) {
  int tid = (argc == 2) ? atoi(argv[1]) : gettid();

  struct timespec tp;

  if (clock_gettime(clockid(tid), &tp) == -1) {
    printf("Error getting time (error no. %d)\n", errno);
    exit(errno);
  }

  printf("Time: %ld\n", tp.tv_nsec);

  return 0;
}

相关内容