2

嗨,我在为我的操作系统类工作时遇到了一个小问题。我被指示使用 getrusage() 来确定我正在编写的程序在用户模式和内核模式下花费的时间量。问题是它总是告诉我我的 CPU 和内核使用率为零。在查找该函数时,手册页提到,如果您的特定版本的 linux 不支持 rusage 结构的某些成员,它们将被设置为零。基本上我想知道是否有人可以告诉我我对函数的调用和访问它的参数是否正确(所以我可以判断我是否是问题或我的内核不支持这些功能)。

代码

struct rusage usage;
struct rusage *p = &usage;

getrusage(RUSAGE_SELF, p);

printf("time in user mode = %ld\ntime in kernel mode = %ld\n", p->ru_utime.tv_sec, p->ru_stime.tv_sec);
4

1 回答 1

5

struct rusage成员ru_utimeru_stime都是 type ,struct timeval如下所示:

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

tv_sec告诉您经过的秒数,并tv_usec告诉您剩余的微秒数。因此,如果要打印整个时间段,则需要同时打印两者。

由于您只打印tv_sec成员,我怀疑您的程序运行时间不够长,无法超过 0 秒。您还需要打印其他值

printf("time in user mode = %ld.%06ld ", 
     p->ru_utime.tv_sec, p->ru_utime.tv_usec);
printf("time in kernel mode = %ld.%06ld\n", 
     p->ru_stime.tv_sec, p->ru_stime.tv_usec);

您可以看到我为其他打印​​结构的方法链接的问题。timeval

于 2012-04-16T02:40:24.553 回答