getrusage
Section: System Calls (2)
Updated: 2026-02-08
Index
JM Home Page
roff page
名前
getrusage - 資源の使用量を取得する
ライブラリ
標準 C ライブラリ (libc,~-lc)
書式
#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 以降)
-
This is the maximum resident set size used (in KiB). For
RUSAGE_CHILDREN, this is the resident set size of the largest child, not
the maximum resident set size of the process tree.
- ru_ixrss (メンテナンスされていない)
-
このフィールドは現在のところ Linux では未使用である。
- ru_idrss (メンテナンスされていない)
-
このフィールドは現在のところ Linux では未使用である。
- ru_isrss (メンテナンスされていない)
-
このフィールドは現在のところ Linux では未使用である。
- ru_minflt
-
The number of page faults serviced without any I/O activity; here, I/O
activity is avoided by ``reclaiming'' a page frame from the list of pages
awaiting reallocation.
- 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 以降)
-
優先度が自分より高いプロセッサが実行可能になったか、現在のプロセスが自分のタイムスライスを超過したことにより行われたコンテキストスイッチの回数。
返り値
On success, zero is returned. On error, -1 is returned, and errno is set
to indicate the error.
エラー
- EFAULT
-
usage がアクセス可能なアドレス空間の外を指している。
- EINVAL
-
who が無効である。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。
| インターフェース | 属性 | 値
|
|
getrusage()
| Thread safety | MT-Safe
|
標準規格
POSIX.1-2024.
POSIX.1 は getrusage() を規定しているが、規定しているフィールドは ru_utime と ru_stime
だけである。
RUSAGE_THREAD は Linux 固有である。
歴史
4.3BSD, SVr4, SUSv1, POSIX.1-2001 XSI.
Before Linux 2.6.9, if the disposition of SIGCHLD is set to SIG_IGN
then the resource usages of child processes are automatically included in
the value returned by RUSAGE_CHILDREN, although POSIX.1-2001 explicitly
prohibits this. This nonconformance is rectified in Linux 2.6.9 and later.
このページの最初で示した構造体の定義は 4.3BSD Reno のものである。
Ancient systems provided a vtimes() function with a similar purpose to
getrusage(). For backward compatibility, glibc (up until Linux 2.32)
also provides vtimes(). All new applications should be written using
getrusage(). (Since Linux 2.33, glibc no longer provides an vtimes()
implementation.)
注意
execve(2) の前後でリソース使用量の指標は保持される。
関連項目
clock_gettime(2), getrlimit(2), times(2), wait(2), wait4(2),
clock(3), proc_pid_stat(5), proc_pid_io(5)
Index
- 名前
-
- ライブラリ
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 属性
-
- 標準規格
-
- 歴史
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.