GETRUSAGE(2)

名称
getrusage - リソース利用についての情報を得る

ライブラリ
libc

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

解説
getrusage() システムコールは、現在のプロセス、またはそのプロセスが生成して、終了済みである すべての子プロセスが使用したリソースを詳しく説明する情報を返します。 who 引数は RUSAGE_SELF または RUSAGE_CHILDREN のどちらかです。 rusage が指すバッファには次の構造体が入れられます。

    struct rusage {
            struct timeval ru_utime; /* 使用されたユーザ時間 */
            struct timeval ru_stime; /* 使用されたシステム時間 */
            long ru_maxrss;          /* 最大常駐セットのサイズ */
            long ru_ixrss;           /* 共有テキストメモリ総サイズ */
            long ru_idrss;           /* 非共有データ総サイズ */
            long ru_isrss;           /* 非共有スタック総サイズ */
            long ru_minflt;          /* ページ再生数 */
            long ru_majflt;          /* ページフォルト */
            long ru_nswap;           /* スワップ */
            long ru_inblock;         /* ブロック入力操作 */
            long ru_oublock;         /* ブロック出力操作 */
            long ru_msgsnd;          /* 送信済みメッセージ */
            long ru_msgrcv;          /* 受信済みメッセージ */
            long ru_nsignals;        /* 受信済みシグナル */
            long ru_nvcsw;           /* 自発的なコンテキストスイッチ */
            long ru_nivcsw;          /* 非自発的なコンテキストスイッチ */
    };

フィールドは次のように解釈されます:

ru_utime
    ユーザモードで処理を実行するのに費やした時間の合計。

ru_stime
    (1 つ以上の) プロセスのためにシステムが処理を実行するのに 消費した時間の合計。

ru_maxrss
    使用された常駐セットサイズの最大値 (キロバイト単位)。

ru_ixrss
    他のプロセスとの間でも共有されていたテキストセグメント によって使用されたメモリ量の “合計” 値。 この値は「キロバイト * 実行のチック数」の単位で表現されます。 チックは統計用のクロックチックです。 統計用クロックの周波数は sysconf(_SC_CLK_TCK) チック / 秒です。

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
    より高い優先順位プロセスが実行可能になったために、 または現在のプロセスがそのタイムスライスを超過したために、 結果として発生したコンテキストスイッチの回数。

注
ru_inblock と ru_oublock の値は実際の入出力だけについてのものです。 キャッシュメカニズムによって提供されるデータは、データを読取りまたは 書込みを行う最初のプロセスについてのみカウントされます。

戻り値

エラー
getrusage() システムコールは次の場合に処理を失敗します:

[EINVAL]
    who 引数が有効な値ではありません。

[EFAULT]
    rusage 引数によって指定されるアドレスは、プロセスアドレス空間の 有効な部分内にありません。

関連項目
gettimeofday(2), wait(2), clocks(7)

バグ
まだ終了していない子プロセスに関する情報を得る方法はありません。

歴史
getrusage() システムコールは 4.2BSD で登場しました。