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

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