## 8.15.1 リソースの制限

リソースの使用は下に述べる `setrlimit()` 関数を使って制限 することができます。各リソースは二つ組の制限値: ソフトリミット (soft limit) 、およびハードリミット (hard limit) 、で制御されます。 ソフトリミットは現在の制限値で、時間とともにプロセスによって下げたり 上げたりできます。ソフトリミットはハードリミットを超えることは できません。ハードリミットはソフトリミットよりも高い任意の値まで 下げることができますが、上げることはできません。(スーパユーザの 有効な UID を持つプロセスのみがハードリミットを上げることができます。)

制限をかけるべく指定できるリソースはシステムに依存します。指定できる リソースは getrlimit(2) マニュアルページで解説されています。 以下に列挙するリソースは背後のオペレーティングシステムがサポートする 場合にサポートされています; オペレーティングシステム側で値を調べたり 制御したりできないリソースは、そのプラットフォーム向けのこのモジュール 内では定義されていません。

`getrlimit`( | resource)

  resource の現在のソフトおよびハードリミットを表すタプル `(soft, hard)` を返します。無効なリソースが 指定された場合には `ValueError` が、背後のシステム コールが予期せず失敗した場合には `error` が送出されます。

`setrlimit`( | resource, limits)

  resouce の新たな消費制限を設定します。limits 引数 には、タプル `(soft, hard)` による二つの整数で、 新たな制限を記述しなければなりません。現在指定可能な最大の制限 を指定するために `-1` を使うことができます。

  無効なリソースが指定された場合、ソフトリミットの値がハードリミット の値を超えている場合、プロセスが (スーパユーザの有効な UID を持って いない状態で) ハードリミットを引き上げようとした場合には `ValueError` が送出されます。背後のシステムコールが予期せず 失敗した場合には `error` が送出される可能性もあります。

以下のシンボルは、後に述べる関数 `setrlimit()` および `getrlimit()` を使って消費量を制御することができるリソース を定義しています。これらのシンボルの値は、C プログラムで使われて いるシンボルと全く同じです。

getrlimit(2) の Unix マニュアルページには、指定可能な リソースが列挙されています。全てのシステムで同じシンボルが使われて いるわけではなく、また同じリソースを表すために同じ値が使われて いるとも限らないので注意してください。このモジュールはプラットフォーム 間の相違を隠蔽しようとはしていません -- あるプラットフォームで 定義されていないシンボルは、そのプラットフォーム向けの本モジュール では利用することができません。

`RLIMIT_CORE`
  現在のプロセスが生成できるコアファイルの最大 (バイト) サイズです。 プロセスの全体イメージを入れるためにこの値より大きなサイズのコア ファイルが要求された結果、部分的なコアファイルが生成される可能性が あります。

`RLIMIT_CPU`
  プロセッサが利用することができる最大プロセッサ時間 (秒) です。 この制限を超えた場合、`SIGXCPU` シグナルがプロセスに送られ ます。(どのようにしてシグナルを捕捉したり、例えば開かれているファイルを ディスクにフラッシュするといった有用な処理を行うかについての情報は、 `signal` モジュールのドキュメントを参照してください)

`RLIMIT_FSIZE`
  プロセスが生成できるファイルの最大サイズです。マルチスレッドプロセス の場合、この値は主スレッドのスタックにのみ影響します。

`RLIMIT_DATA`
  プロセスのヒープの最大 (バイト) サイズです。

`RLIMIT_STACK`
  現在のプロセスのコールスタックの最大 (バイト) サイズです。

`RLIMIT_RSS`
  プロセスが取りうる最大 RAM 常駐ページサイズ (resident set size) です。

`RLIMIT_NPROC`
  現在のプロセスが生成できるプロセスの上限です。

`RLIMIT_NOFILE`
  現在のプロセスが開けるファイル記述子の上限です。

`RLIMIT_OFILE`
  `RLIMIT_NOFILE` の BSD での名称です。

`RLIMIT_MEMLOCK`
  メモリ中でロックできる最大アドレス空間です。

`RLIMIT_VMEM`
  プロセスが占有できるマップメモリの最大領域です。

`RLIMIT_AS`
  アドレス空間でプロセスが占有できる最大領域 (バイト) です。