linux程序资源使用统计

名称

getrusage - get resource usage,该函数可以程序统计对系统资源的使用量。(实际上是统计了进程执行直到调用该函数时的资源用量,如果在不同的时间调用该函数,会得到不同的结果)

概要

所需头文件:

sys/time.h(为了得到timeval结构体的声明,这个结构体实际上在bits/time.h中声明),sys/resource.h

原型

int getrusage(int who, struct rusage *usage);

描述

getrusage()返回who的系统资源用量,who可以取以下值: 
RUSAGE_SELF:返回调用该函数进程的资源用量统计,会返回该进程下所有线程的资源用量之和。 
RUSAGE_CHILDREN:返回调用该函数进程所有已终止且被回收子进程的资源用量统计。如果进程有孙子进程或更远的后代进程,且这些后代进程和这些后代进程与调用进程之间的中间进程也已终止且被回收,那么这些后代进程的资源用量也会被统计。 
RUSAGE_THREAD(Linux 2.6.26起支持):返回调用该函数线程的资源用量统计。 
资源用量以以下结构体的形式返回到usage指针指向的空间:

struct rusage {
    struct timeval ru_utime; /* user CPU time used */
    struct timeval ru_stime; /* system CPU time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims (soft page faults) */
    long   ru_majflt;        /* page faults (hard page faults) */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* IPC messages sent */
    long   ru_msgrcv;        /* IPC messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

有些字段并不被Linxu支持,但是为了兼容其他系统以及未来可能支持,这些字段仍被保留了下来,这些字段在函数执行后会被内核设为0。各个字段的解释如下: 
ru_utime:返回进程在用户模式下的执行时间,以timeval结构的形式返回(该结构体在bits/timeval中声明)。 
ru_stime:返回进程在内核模式下的执行时间,以timeval结构的形式返回(该结构体在bits/timeval中声明)。 
ru_maxrss(Linux 2.6.32起支持):返回最大驻留集的大小,单位为kb。当who被指定为RUSAGE_CHILDREN时,返回各子进程最大驻留集的大小中最大的一个,而不是进程树中最大的最大驻留集。 
ru_ixrss:目前不支持 
ru_idrss:目前不支持 
ru_isrss:目前不支持 
ru_minflt:缺页中断的次数,且处理这些中断不需要进行I/O;不需要进行I/O操作的原因是系统使用“reclaiming”的方式在物理内存中得到了之前被淘汰但是未被修改的页框。(第一次访问bss段时也会产生这种类型的缺页中断) 
ru_majflt:缺页中断的次数,且处理这些中断需要进行I/O。 
ru_nswap:目前不支持 
ru_inblock(Linux 2.6.22起支持):文件系统需要进行输入操作的次数。 
ru_oublock(Linux 2.6.22起支持):文件系统需要进行输出操作的次数。 
ru_msgsnd:目前不支持 
ru_msgrcv:目前不支持 
ru_nsignals:目前不支持 
ru_nvcsw(Linux 2.6起支持):因进程自愿放弃处理器时间片而导致的上下文切换的次数(通常是为了等待请求的资源)。 
ru_nivcsw(Linux 2.6起支持):因进程时间片使用完毕或被高优先级进程抢断导致的上下文切换的次数。

返回值

执行成功返回0,发生错误返回-1,同时设置errno的值。

错误

EFAULT:usage指针指向不可访问地址。 
EINVAL:who被指定为无效值。 
转载请注明来源:http://blog.csdn.net/imred/article/details/50643022

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章