8.12.1 資源の使用制限

資源の使用は、以下に示す 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