## 8.15.2 リソースの使用状態

以下の関数はリソース使用情報を取得するために使われます:

`getrusage`( | who)

  この関数は、who 引数で指定される、現プロセスおよびその子プロセスに よって消費されているリソースを記述するオブジェクトを返します。 who 引数は以下に記述される `RUSAGE_*` 定数のいずれかを 使って指定します。

  返される値の各フィールドはそれぞれ、個々のシステムリソースがどれくらい 使用されているか、例えばユーザモードでの実行に費やされた時間やプロセス が主記憶からスワップアウトされた回数、を示しています。幾つかの値、 例えばプロセスが使用しているメモリ量は、内部時計の最小単位に依存します。

  以前のバージョンとの互換性のため、返される値は 16 要素からなるタプル としてアクセスすることもできます。

  戻り値のフィールド `ru_utime` および `ru_stime` は 浮動小数点数で、それぞれユーザモードでの実行に費やされた時間、および システムモードでの実行に費やされた時間を表します。それ以外の値は 整数です。これらの値に関する詳しい情報は getrusage(2) を調べてください。以下に簡単な概要を示します:

  インデクス | フィールド名 | リソース
  --- | --- | ---
  `0` | `ru_utime` | ユーザモード実行時間 (float)
  `1` | `ru_stime` | システムモード実行時間 (float)
  `2` | `ru_maxrss` | 最大常駐ページサイズ
  `3` | `ru_ixrss` | 共有メモリサイズ
  `4` | `ru_idrss` | 非共有メモリサイズ
  `5` | `ru_isrss` | 非共有スタックサイズ
  `6` | `ru_minflt` | I/O を必要とするページフォールト数
  `7` | `ru_majflt` | I/O を必要としないページフォールト数
  `8` | `ru_nswap` | スワップアウト回数
  `9` | `ru_inblock` | ブロック入力操作数
  `10` | `ru_oublock` | ブロック出力操作数
  `11` | `ru_msgsnd` | 送信メッセージ数
  `12` | `ru_msgrcv` | 受信メッセージ数
  `13` | `ru_nsignals` | 受信シグナル数
  `14` | `ru_nvcsw` | 自発的な実行コンテキスト切り替え数
  `15` | `ru_nivcsw` | 非自発的な実行コンテキスト切り替え数

  この関数は無効な who 引数を指定した場合には `ValueError` を送出します。また、異常が発生 した場合には `error` 例外が送出される可能性があります。

  バージョン2.3 以降で変更された 仕様: 各値を返されたオブジェクトの属性としてアクセス できるようにしました

`getpagesize`( | )

  システムページ内のバイト数を返します。(ハードウェアページサイズと 同じとは限りません。) この関数はプロセスが使用しているメモリの バイト数を決定する上で有効です。`getrusage()` が 返すタプルの 3 つ目の要素はページ数で数えたメモリ使用量です; ページサイズを掛けるとバイト数になります。

以下の `RUSAGE_*` シンボルはどのプロセスの情報を提供させるか を指定するために関数 `getrusage()` に渡されます。

`RUSAGE_SELF`
  `RUSAGE_SELF` はプロセス自体に属する情報を要求するために 使われます。

`RUSAGE_CHILDREN`
  `getrusage()` に渡すと呼び出し側プロセスの子プロセスのリソース 情報を要求します。

`RUSAGE_BOTH`
  `getrusage()` に渡すと現在のプロセスおよび子プロセスの両方が 消費しているリソースを要求します。全てのシステムで利用可能なわけでは ありません。