getrusage


#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
  
#define   RUSAGE_SELF     0
#define   RUSAGE_CHILDREN     -1
  
int   getrusage(int who, struct rusage *rusage);


getrusage函数有两个参数。第一个参数可以设置为RUSAGE_SELF或者RUSAGE_CHILDREN。如果设置成 RUSAGE_SELF,那么将会以当前进程的相关信息来填充rusage(数据)结构。反之,如果设置成RUSAGE_CHILDREN,那么 rusage结构中的数据都将是当前进程的子进程的信息。( RUSAGE_CHILDREN
              Return  resource  usage  statistics  for all children of the calling process that have terminated and been waited for.  These statistics will
              include the resources used by grandchildren, and further removed descendants, if all of the intervening descendants waited  on  their  termi‐
              nated children.)

linux 增加了第三个参数 RUSAGE_THREAD (since Linux 2.6.26)
              Return resource usage statistics for the calling thread.





rusage(数据)结构定义在/usr/include/sys/resource.h中。它含有以下成员变量:

struct   rusage {
      struct timeval ru_utime;   /* user time used */
      struct timeval ru_stime;   /* system time used */
      long  ru_maxrss;           /* max resident set size */
      long  ru_ixrss;            /* integral shared memory size */
      long  ru_idrss;            /* integral unshared data */
      long  ru_isrss;            /* integral unshared stack */
      long  ru_minflt;           /* page reclaims */
      long  ru_majflt;           /* page faults */
      long  ru_nswap;            /* swaps */
      long  ru_inblock;          /* block input operations */
      long  ru_oublock;          /* block output operations */
      long  ru_msgsnd;           /* messages sent */
      long  ru_msgrcv;           /* messages received */
      long  ru_nsignals;         /* signals received */
      long  ru_nvcsw;            /* voluntary context switches */
      long  ru_nivcsw;           /* involuntary " */
  };
示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>
int
main(int argc, char **argv)
{

    struct rusage buf;

    
    if(argc == 2) {
      system(argv[1]);
    }else {
      fprintf(stderr,"./getrusage  /"ls -l >/dev/null/"/n");
      exit(0);
    }
    int err = getrusage(RUSAGE_CHILDREN, &buf);
    //int err = getrusage(RUSAGE_SELF, &buf);
    printf("ERR=%d/n", err);
    printf("%20s:%ld/%ld/t%s/n", "ru_utime", 
       buf.ru_utime.tv_sec, buf.ru_utime.tv_usec,
       "user time used (secs/usecs)");
    printf("%20s:%ld/%ld/t%s/n", "ru_stime", 
       buf.ru_stime.tv_sec, 
       buf.ru_stime.tv_usec,
       "system time used (secs/usecs)");
    printf("%20s:%-10ld/t%s/n", 
       "ru_maxrss",
       buf.ru_maxrss,
       "maximum resident set size");
    printf("%20s:%-10ld/t%s/n",
       "ru_ixrss", 
       buf.ru_ixrss,
       "integral shared memory size");
    printf("%20s:%-10ld/t%s/n", 
       "ru_idrss",
       buf.ru_idrss,
       "integral unshared data size");
    printf("%20s:%-10ld/t%s/n", 
       "ru_isrss",
       buf.ru_isrss,
       "integral unshared data stack size");
    printf("%20s:%-10ld/t%s/n", 
       "ru_minflt",
       buf.ru_minflt,
       "page reclaims");
    printf("%20s:%-10ld/t%s/n",
       "ru_majflt",
       buf.ru_majflt,
       "page faults");
    printf("%20s:%-10ld/t%s/n",
       "ru_nswap",
       buf.ru_nswap,
       "swaps");
    printf("%20s:%-10ld/t%s/n",
       "ru_inblock",
       buf.ru_inblock,
       "block input operations");
    printf("%20s:%-10ld/t%s/n",
       "ru_oublock",
       buf.ru_oublock,
       "block output operations");
    printf("%20s:%-10ld/t%s/n",
       "ru_msgsnd",
       buf.ru_msgsnd,
       "messages sent");
    printf("%20s:%-10ld/t%s/n",
       "ru_msgrcv",
       buf.ru_msgrcv,
       "messages received");
    printf("%20s:%-10ld/t%s/n",
       "ru_nsignals",
       buf.ru_nsignals,
       "signals received");
    printf("%20s:%-10ld/t%s/n",
       "ru_nvcsw",
       buf.ru_nvcsw,
       "voluntary context switches");
    printf("%20s:%-10ld/t%s/n",
       "ru_nivcsw",
       buf.ru_nivcsw,
       "involuntary context switches");
  exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值