Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       getrusage - 資源の使用量を取得する

書式

       #include <sys/time.h>
       #include <sys/resource.h>

       int getrusage(int who, struct rusage *usage);

説明

       getrusage()   は who の資源 (resource) の使用量を返す。 who には以下のいずれか一つを指定で
       きる。

       RUSAGE_SELF
              呼び出したプロセスの資源使用量、 そのプロセス内の全スレッドが使用している資源の合計
              を返す。

       RUSAGE_CHILDREN
              呼び出したプロセスの子プロセスのうち、 終了して待ち状態にある全プロセスが使用してい
              る資源使用量の統計を返す。 これらの統計情報には、孫プロセスやその子孫のプロセスのう
              ち、 削除待ちのものが使用している資源も含まれる。

       RUSAGE_THREAD (Linux 2.6.26 以降)
              呼び出したスレッドに関する資源使用量の統計を返す。  <sys/resource.h> からこの定数の
              定義を得るためには、 ((どのヘッダーファイルをインクルードするよりも前に) 機能検査マ
              クロ _GNU_SOURCE を定義しなければならない。

       資源使用量は usage が指す構造体に格納されて返される。 構造体は以下の形式である。

           struct rusage {
               struct timeval ru_utime; /* 使用されたユーザー CPU 時間 */
               struct timeval ru_stime; /* 使用されたシステム CPU 時間 */
               long   ru_maxrss;        /* RAM 上に存在する仮想ページのサイズ
                                          (resident set size) の最大値 */
               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;        /* 送信された IPC メッセージ */
               long   ru_msgrcv;        /* 受信された IPC メッセージ */
               long   ru_nsignals;      /* 受信されたシグナル */
               long   ru_nvcsw;         /* 意図したコンテキスト切り替え */
               long   ru_nivcsw;        /* 意図しないコンテキスト切り替え */
           };

       すべてのフィールドがサポートされているわけではない。  メンテナンスされていないフィールドに
       は、 カーネルが 0 を設定する (メンテナンスされていないフィールドは、  他のシステムとの互換
       性のために提供されており、 いつか Linux でもサポートされるかもしれない)。 各フィールドの詳
       細は以下の通りである。

       ru_utime
              ユーザーモードでの実行で消費された合計時間。 timeval 構造体 (秒とミリ秒) で表現され
              る。

       ru_stime
              カーネルモードでの実行で消費された合計時間。 timeval 構造体 (秒とミリ秒) で表現され
              る。

       ru_maxrss (Linux 2.6.32 以降)
              使用された resident set size の最大値 (キロバイト単位)。  RUSAGE_CHILDREN  の場合に
              は、プロセスツリーの  resident  set  size の最大値ではなく、 最も大きい子プロセスの
              resident set size となる。

       ru_ixrss (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_idrss (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_isrss (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_minflt
              I/O 動作なしで発生したページフォルトの回数。 再割り当てを待っているページリストから
              ページフレームを「回収」 (reclaim) することで、 I/O 動作を避けることができる。

       ru_majflt
              I/O 動作を必要とするページフォルトの回数。

       ru_nswap (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_inblock (Linux 2.6.22 以降)
              ファイルシステムが入力を実行する必要があった回数。

       ru_oublock (Linux 2.6.22 以降)
              ファイルシステムが出力を実行する必要があった回数。

       ru_msgsnd (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_msgrcv (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_nsignals (メンテナンスされていない)
              このフィールドは現在のところ Linux では未使用である。

       ru_nvcsw (Linux 2.6 以降)
              自分のタイムスライスが完了する前にプロセスが自発的にプロセッサを解放して行われたコ
              ンテキストスイッチの回数 (通常はリソースが利用可能になるのを待つために行われる)。

       ru_nivcsw (Linux 2.6 以降)
              優先度が自分より高いプロセッサが実行可能になったか、現在のプロセスが自分のタイムス
              ライスを超過したことにより行われたコンテキストスイッチの回数。

返り値

       成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

       EFAULT usage がアクセス可能なアドレス空間の外を指している。

       EINVAL who が無効である。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────┼───────────────┼─────────┤
       │getrusage()      │ Thread safety │ MT-Safe │
       └─────────────────┴───────────────┴─────────┘

準拠

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.  POSIX.1 は getrusage() を規定しているが、規定し
       ているフィールドは ru_utimeru_stime だけである。

       RUSAGE_THREAD は Linux 固有である。

注意

       execve(2)  の前後でリソース使用量の指標は保持される。

       今日では  <sys/time.h>  をインクルードする必要はないが、  インクルードしておけば移植性が増
       す。 (実際 struct timeval<sys/time.h> で定義されている。)

       2.6.9  より前のバージョンの Linux カーネルでは、 SIGCHLD の処理が SIG_IGN に設定されている
       と、 子プロセスのリソース使用量が RUSAGE_CHILDREN で返される値に自動的に含められる。  しか
       し  POSIX.1-2001  では、これを明確に禁止している。 この準拠していなかった点は、Linux 2.6.9
       以降で改正された。

       このページの最初で示した構造体の定義は 4.3BSD Reno のものである。

       古いシステムでは、 getrusage() と同様の目的を持つ関数 vtimes()  が提供されていた。後方互換
       性のため、glibc  (バージョン  2.32  まで) でも vtimes() を提供している。全ての新しいアプリ
       ケーションでは getrusage() を使用すべきである。

       proc(5)  にある /proc/[pid]/stat の説明も参照のこと。

関連項目

       clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2), clock(3)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。