C言語システムコール-getrusage

getrusageシステムコール

概要

getrusageはプロセスのシステムリソース使用量を取得します。


リソース情報を受け取るには、rusage構造体へのポインタを指定します。

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;              /* 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 */
        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 <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/resource.h>

static void
dummy(void)
{
    int cnt = 0;
    int sum = 1;

    for(cnt = 0; cnt <= 1000000; cnt++ ){
        sum *= cnt;
    }
}

int
main(void)
{
    struct rusage usage;
    int rc = 0;
    dummy();

    rc = getrusage(RUSAGE_SELF, &usage);
    if(rc < 0){
        printf("Error: getrusage(%d) %s\n", errno, strerror(errno));
        return(-1);
    }

    printf("usr time = %ld.%d\n",
           usage.ru_utime.tv_sec, usage.ru_utime.tv_usec);
    printf("sys time = %ld.%d\n",
           usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);

    return(0);
}

関連ページ