如果我知道系统上运行的任意线程的 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;
}