Linux:getrusage的用法
2016-02-07 17:15
555 查看
转载请注明来源:http://blog.csdn.net/imred/article/details/50643022
RUSAGE_SELF:返回调用该函数进程的资源用量统计,会返回该进程下所有线程的资源用量之和。
RUSAGE_CHILDREN:返回调用该函数进程所有已终止且被回收子进程的资源用量统计。如果进程有孙子进程或更远的后代进程,且这些后代进程和这些后代进程与调用进程之间的中间进程也已终止且被回收,那么这些后代进程的资源用量也会被统计。
RUSAGE_THREAD(Linux 2.6.26起支持):返回调用该函数线程的资源用量统计。
资源用量以以下结构体的形式返回到usage指针指向的空间:
有些字段并不被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起支持):因进程时间片使用完毕或被高优先级进程抢断导致的上下文切换的次数。
EINVAL:who被指定为无效值。
转载请注明来源:http://blog.csdn.net/imred/article/details/50643022
名称
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 */ };
有些字段并不被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
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍