[C++] 获取进程资源使用情况

getrusage

  • getrusage 是一个系统调用,在sys/resource.h头文件中,并且用于获取 进程/线程的资源使用情况。注意不是线程。

1. 基本使用

#include <sys/resource.h>
struct rusage usage;
// who用于决定获取哪个进程或者线程的使用情况,
// usage 则是存储获取到的资源使用情况
int getrusage(int who, struct rusage *usage);

// eg. 获取当前进程资源情况
getrusage(RUSAGE_SELF, &usage);
// 获取当前线程资源情况
getrusage(RUSAGE_THREAD, &usage);

2. who 参数的类型

 who的类型
/* Whose usage statistics do you want?  */
enum __rusage_who
{
  /* The calling process.  */
  RUSAGE_SELF = 0,
#define RUSAGE_SELF RUSAGE_SELF

  /* All of its terminated child processes.  */
  RUSAGE_CHILDREN = -1
#define RUSAGE_CHILDREN RUSAGE_CHILDREN

#ifdef __USE_GNU
  ,
  /* The calling thread.  */
  RUSAGE_THREAD = 1
# define RUSAGE_THREAD RUSAGE_THREAD
  /* Name for the same functionality on Solaris.  */
# define RUSAGE_LWP RUSAGE_THREAD
#endif
};

3. struct rusage包括哪些信息

属性描述
ru_utime用户态CPU时间,表示进程在用户态运行的时间(衡量进程执行效率)
ru_stime系统态CPU时间,表示进程在内核态运行的时间 (衡量进程对系统资源的需求)
ru_maxrss最大驻留集大小,表示进程占用的最大物理内存
ru_ixrss积分共享内存大小
ru_idrss积分非共享数据区大小
ru_isrss积分非共享栈大小
ru_minflt重新映射的页面数量,即软页面错误
ru_majflt页面错误的数量,即硬页面错误
ru_nswap交换出的次数
ru_inblock阻塞输入操作的次数
ru_oublock阻塞输出操作的次数
ru_msgsnd发送的IPC消息数量
ru_msgrcv接收的IPC消息数量
ru_nsignals接收的信号数量
ru_nvcsw自愿上下文切换的次数
ru_nivcsw非自愿上下文切换的次数

Reference

  • https://zhuanlan.zhihu.com/p/661683633
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值