文章目录

  • 简介
  • 函数说明
    • 原型
    • 参数
    • 返回值
    • 属性
  • 示例

getrusage用于统计系统资源使用情况,即进程执行直到调用该函数时的资源使用情况,如果在不同的时间调用该函数,会得到不同的结果。


简介

getrusage用于统计系统资源使用情况,即进程执行直到调用该函数时的资源使用情况,如果在不同的时间调用该函数,会得到不同的结果。

目前在LinuxmacOS支持该函数。

函数说明

原型

#include <sys/time.h>
#include <sys/resource.h>int getrusage(int who, struct rusage *usage);

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

参数

who:资源统计的对象,有如下取值:

  • RUSAGE_SELF:返回调用进程的资源使用统计信息,即该进程中所有线程使用的资源总和;
  • RUSAGE_CHILDREN:返回调用进程所有已终止且被回收子进程的资源使用统计信息。如果进程有孙子进程或更远的后代进程,且这些后代进程和这些后代进程与调用进程之间的中间进程也已终止且被回收,那么这些后代进程的资源使用统计信息也会被统计;
  • RUSAGE_THREADLinux 2.6.26起支持):返回调用线程的资源使用统计信息;
宏定义 取值
RUSAGE_SELF 0
RUSAGE_CHILDREN -1
RUSAGE_THREAD 1

宏定义在sys/resource.h-> bits/resource.h

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 */
};

结构体struct rusage各个成员释义如下:

  • ru_utime:返回进程在用户模式下的执行时间,以timeval结构的形式返回(该结构体在bits/timeval中声明);
  • ru_stime:返回进程在内核模式下的执行时间,以timeval结构的形式返回(该结构体在bits/timeval中声明);
  • ru_maxrssLinux 2.6.32起支持):返回rss(实际使用物理内存,包含共享库占用的内存)的大小,单位为KB;当who被指定为RUSAGE_CHILDREN时,返回各子进程rss的大小中最大的一个,而不是进程树中最大的rss
  • ru_ixrss:目前不支持;
  • ru_idrss:目前不支持;
  • ru_isrss:目前不支持;
  • ru_minflt:缺页中断的次数,且处理这些中断不需要进行I/O,不需要进行I/O操作的原因是系统使用reclaiming的方式在物理内存中得到了之前被淘汰但是未被修改的页框。(第一次访问bss段时也会产生这种类型的缺页中断);
  • ru_majflt:缺页中断的次数,且处理这些中断需要进行I/O
  • ru_nswap:目前不支持;
  • ru_inblockLinux 2.6.22起支持):文件系统需要进行输入操作的次数;
  • ru_oublockLinux 2.6.22起支持):文件系统需要进行输出操作的次数;
  • ru_msgsnd:目前不支持;
  • ru_msgrcv:目前不支持;
  • ru_nsignals:目前不支持;
  • ru_nvcswLinux 2.6起支持):因进程自愿放弃处理器时间片而导致的上下文切换的次数(通常是为了等待请求的资源);
  • ru_nivcswLinux 2.6起支持):因进程时间片使用完毕或被高优先级进程抢断导致的上下文切换的次数;

其中有些结构体成员目前并不被Linxu支持,但是为了兼容其它系统以及未来扩展,仍被保留了下来,这些结构体成员在函数执行后会被内核默认设置为0

返回值

成功0
失败-1,并设置errno的值,包含如下两种错误:

  • EFAULTusage指针指向不可访问地址;
  • EINVALwho被指定为无效值;

属性

getrusage函数是线程安全的。

示例

#include <stdio.h>/* include for getrusage */
#ifndef _WIN32
#include <sys/time.h>
#include <sys/resource.h>
#endifstatic void print_rusage() {#ifndef _WIN32int ret;struct rusage usage;ret = getrusage(RUSAGE_SELF, &usage);if (0 != ret) {printf("getrusage failed\n");goto end;}printf("%s: %.3fms\n", "ru_utime", (usage.ru_utime.tv_sec * 1000.0 + usage.ru_utime.tv_usec / 1000.0));printf("%s: %.3fms\n", "ru_stime", (usage.ru_stime.tv_sec * 1000.0 + usage.ru_stime.tv_usec / 1000.0));printf("%s: %.3fM\n", "ru_maxrss", (usage.ru_maxrss / 1024.0));printf("%s: %ld\n", "ru_ixrss", usage.ru_ixrss);printf("%s: %ld\n", "ru_idrss", usage.ru_idrss);printf("%s: %ld\n", "ru_isrss", usage.ru_isrss);printf("%s: %ld\n", "ru_minflt", usage.ru_minflt);printf("%s: %ld\n", "ru_majflt", usage.ru_majflt);printf("%s: %ld\n", "ru_nswap", usage.ru_nswap);printf("%s: %ld\n", "ru_inblock", usage.ru_inblock);printf("%s: %ld\n", "ru_oublock", usage.ru_oublock);printf("%s: %ld\n", "ru_msgsnd", usage.ru_msgsnd);printf("%s: %ld\n", "ru_msgrcv", usage.ru_msgrcv);printf("%s: %ld\n", "ru_nsignals", usage.ru_nsignals);printf("%s: %ld\n", "ru_nvcsw", usage.ru_nvcsw);printf("%s: %ld\n", "ru_nivcsw", usage.ru_nivcsw);#endifend:return;
}

完整代码:https://github.com/AnSwErYWJ/DogFood/blob/master/C/getrusage.c。


微信公众号同步更新,微信搜索"AnSwEr不是答案"或者扫描二维码,即可订阅。

  • GitHub:AnSwErYWJ
  • Blog:http://www.answerywj.com
  • Email:yuanweijie1993@gmail.com
  • Weibo:@AnSwEr不是答案

getrusage-进程资源统计函数相关推荐

  1. 线程间到底共享了哪些进程资源

    进程和线程这两个话题是程序员绕不开的,操作系统提供的这两个抽象概念实在是太重要了. 关于进程和线程有一个极其经典的问题,那就是进程和线程的区别是什么?相信很多同学对答案似懂非懂. 记住了不一定真懂 有 ...

  2. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  3. 第十七篇:获取 / 修改进程资源限制

    前言 每个进程都有其使用资源的一个限制,这些资源通常是在进程初始化时由进程 0 所建立的,然后由每个后续进程继承. 本文将介绍如何获取并修改进程的资源限制. 获取资源限制函数:getrlimit() ...

  4. 进程资源限制(rlimit)

    在Linux下的进程资源的限制(struct rlimit)详解 在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值, ...

  5. 使用shell脚本对Linux系统和进程资源进行监控

    今天发现一个网站,快课网,感觉还不错,里面有编程,面试,算法等等相关内容. 链接如下:http://www.cricode.com/ 首页便看到这篇文章,正好对Linux和shell等持续关注,转载学 ...

  6. 关于进程资源限制的getrlimit和setrlimit函数(epoll、服务器经常用)

    getrlimit和setrlimit 头文件 #include <sys/resource.h> 函数原型 int getrlimit(int resource, struct rlim ...

  7. 线程间到底共享了哪些进程资源?

    进程和线程这两个话题是程序员绕不开的,操作系统提供的这两个抽象概念实在是太重要了. 关于进程和线程有一个极其经典的问题,那就是进程和线程的区别是什么?相信很多同学对答案似懂非懂. 记住了不一定真懂 关 ...

  8. linux进程理解,进程资源 - 进程基础 - [ 理解Linux进程 ] - 手册网

    进程资源 进程文件 在Linux中"一切皆文件",进程的一切运行信息(占用CPU.内存等)都可以在文件系统找到,例如看一下PID为1的进程信息. root@87096bf68cb2 ...

  9. 【Linux系统编程】进程退出和回收进程资源

    00. 目录 文章目录 00. 目录 01. 进程退出函数 02. 进程退出讨论 03. 回收进程资源 04. 附录 01. 进程退出函数 #include <stdlib.h>void ...

  10. 进程资源和进程状态 TASK_RUNNING TASK_INTERRUPTIBLE TASK_UNINTERRUPTIBLE

    摘要:本文主要介绍进程资源和进程状态.进程资源由两部分组成:内核空间进程资源以及用户空间进程资源.进程状态,就绪/运行状态.等待状态(可以被中断打断).等待状态(不可以被中断打断).停止状态和僵死状态 ...

最新文章

  1. python的基本知识点
  2. 【Opencv实战】“一岁年龄一岁心,匆匆岁月不由人“这款年龄检测机等你来(附源码)
  3. pip安装deb_趟坑:使用pip安装TensorFlow
  4. Xamarin效果第十二篇之控制祖传PLC
  5. 国际站html代码,国际站必须看得懂的HTML代码
  6. 腾讯牵手数十家合作伙伴发起“光合计划” 推动“百千万”三大目标落地
  7. crontab定时任务语法及应用
  8. 程序员该不该主动提加薪?| 畅言
  9. zen cart 操作
  10. Python入门--元组的创建,(),tuple()
  11. 销售订单的 状态 变更
  12. 新房装修选电视机还是投影仪?装修投影仪避坑指南
  13. Ubuntu17.04系统安装必备软件与存在的问题
  14. 【追剧达人JAVA修复版】苹果CMS10原生APP修改版 影视APP源码附安装教程
  15. 卫生事业单位计算机科学与技术,2021年卫生事业单位考试计算机科学与技术知识点-20210417090636.doc-原创力文档...
  16. dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退...
  17. 机器学习算法(一): 基于逻辑回归的分类预测③
  18. 微信小程序流量主之ECPM
  19. Android 在线下载更新App 下载完成安装APK(兼容Android7.0)
  20. 3个方面,解析趣头条的用户激励体系

热门文章

  1. win11彻底删除hao123的方法
  2. 27 信息过滤与反垃圾
  3. [论文笔记]Rob-GAN: Generator, Discriminator, and Adversarial Attacker(CVPR 2019)
  4. 大小写字母ASCII码对照表
  5. html在表格输入文字不显示,Word表格中有部分格子内无法输入文字是怎么回事?...
  6. php8网站,教你从零搭建php8环境
  7. 索骥馆-DIY硬盘之《新手3周学通硬盘芯片级维修》扫描版[PDF]
  8. 大数据人工智能常用特征工程与数据预处理Python实践(2)
  9. OSPF邻居关系建立故障排除
  10. 剑指offer之斐波那契数列求解