資源の使用は、以下に示す setrlimit() 関数を使うことにより制限する
ことができます。各資源は、ソフトリミットとハードリミットの組によって制御されて
います。ソフトリミットが現在のリミットとなり、プロセスの経過時間により
下げられたり上げられたりします。ソフトリミットは、ハードリミットを超えることは
できません。ハードリミットは、ソフトリミットよりも大きい値にまでは下げることが
できますが、上げることはできません。(プロセスがスーパーユーザーの実効UIDを
持っている場合にのみ、ハードリミットを上げることが可能です。)
制限することのできる資源は、システムに依存します。それらは、getrlimit(2)
のマニュアルページに記述されています。以下にあげた資源は、OSがサポートしている
場合にのみサポートされます。OSがチェック、制御できない資源は、そのプラット
フォーム上のこのモジュールには定義されていません。
- getrlimit (resource)
-
指定された資源 resource の現在のソフトリミットとハードリミットをタプル
(soft, hard) で返します。正しくない資源が指定された場合
には、ValueError をあげます。また、内部のシステムコールが失敗した場合
には、error をあげます。
- setrlimit (resource, limits)
-
指定された資源 resource に、新しい消費制限を設定します。引数
limits は、新しい制限を表す2つの整数で構成されるタプル
(soft, hard) でなければなりません。値 -1 は、
設定可能な最大のリミットを指定する時に使用します。
正しくない資源が指定された場合、新しいソフトリミットがハードリミットを超えている
場合、およびプロセスがハードリミットを上げようとした場合(プロセスがスーパー
ユーザーの実効UIDを持っていない場合)には、ValueError をあげます。
また、内部のシステムコールが失敗した場合には、error をあげます。
関数 setrlimit() と getrlimit() によりその消費量を制御する
資源は、以下に示すシンボルによって定義されています。これらシンボルの値は
C プログラムで使用される定数です。
Unix のマニュアルページ getrlimit(2) に、指定できる資源がリストされて
います。同じ資源を表すために、全てのシステムにおいて同じシンボル、同じ値が
使われている訳ではないので注意してください。
- RLIMIT_CORE
-
カレントプロセスが作成可能な、core ファイルの最大サイズ(バイト単位)。
全てのプロセスイメージを含めるために、このサイズよりも大きい core ファイルが
必要となった場合は、部分的な core ファイルが作成されることになります。
- RLIMIT_CPU
-
プロセスが使用するCPU時間(秒単位)の最大量。この制限を超えた場合は、プロセスに
シグナル SIGXCPU が送られます。(このシグナルをどのように受けるか、
またファイルへの書き込みをディスクにフラッシュするなど、その時に行うべき処理
については、signal モジュールのドキュメントを参照してください。)
- RLIMIT_FSIZE
-
プロセスが作成することのできる、1つのファイルの最大サイズ。これは、マルチ
スレッドプロセスではメインスレッドのスタックにのみ作用します。
- RLIMIT_DATA
-
プロセスに対するデータセグメントの最大サイズ(バイト単位)。
- RLIMIT_STACK
-
プロセスに対するスタックセグメントの最大サイズ(バイト単位)。
- RLIMIT_RSS
-
プロセスに対する常駐メモリの最大サイズ。
- RLIMIT_NPROC
-
カレントプロセスが作成することのできるプロセスの数の最大数。
- RLIMIT_NOFILE
-
カレントプロセスがオープンすることのできるファイル記述子の最大数。
- RLIMIT_OFILE
-
RLIMIT_NOFILE のBSDでの名前。
- RLIMIT_MEMLOC
-
メモリ内でロックすることのできる最大アドレス空間。
- RLIMIT_VMEM
-
プロセスが占めることのできるメモリマップエリアの最大値。
- RLIMIT_AS
-
プロセスが取得することができるアドレス空間の最大エリア(バイト単位)。
guido@python.org