スポンサーリンク

GETRLIMIT(2) FreeBSD システムコールマニュアル GETRLIMIT(2)

名称

getrlimit, setrlimit − 最大システムリソース消費を制御する

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>

int

getrlimit(int resource, struct rlimit *rlp);

int

setrlimit(int resource, const struct rlimit *rlp);

解説

現在のプロセス、およびそれが作成する各プロセスによるシステムリソースの消 費限度は、 getrlimit() システムコールで取得することができ、 setrlimit() システムコールで設定できます。

resource 引数は次のうちの 1 つです:

       RLIMIT_AS

プロセスがマップすることを許可される仮想メモリの最大量 ( バイト単位)。

RLIMIT_CORE
作成できる core(5) ファイルの最大サイズ (バイト単位)。

RLIMIT_CPU
各プロセスが使用する CPU 時間の最大量 (秒単位)。

RLIMIT_DATA
プロセス用のデータセグメントの最大サイズ (バイト単位)。こ れは、プログラムがそのブレークを sbrk(2) 関数でどのくらい 遠くまで延長できるかを定義します。

RLIMIT_FSIZE
作成できるファイルの最大サイズ (バイト単位)。

RLIMIT_MEMLOCK
プロセスが mlock(2) システムコールを使用して、プロセスを メモリにロックできる最大サイズ (バイト単位)。

RLIMIT_NOFILE
このプロセスが開けるファイルの最大数。

RLIMIT_NPROC
このユーザ ID が同時に利用できるプロセスの最大数。

RLIMIT_RSS
増加させて良いプロセスの常駐セットサイズの最大サイズ (バ イト単位)。これはプロセスに与えられる物理メモリの量に制限 を課します。メモリが逼迫してシステムがメモリを回収する際 に、宣言された常駐セットサイズを越えるプロセスを回収対象 として選択します。

RLIMIT_SBSIZE
このユーザが使用できるソケットバッファの最大サイズ (バイ ト単位)。このサイズは、ユーザがいつでも保持できるネット ワークメモリ量を制限します。したがって mbuf の使用量も制 限されます。

RLIMIT_STACK
プロセスのスタックセグメントの最大サイズ (バイト数)。これ によって、プログラムのスタックセグメントをどのくらい延長 できるか定義できます。スタック延長はシステムによって自動 的に実行されます。

リソースリミットはソフトリミットおよびハードリミットとして指定されます。 ソフトリミットを越えた場合、プロセスはシグナルを受信する可能性があります (例えば、CPU 時間またはファイルサイズを越えた場合) が、ハードリミットに到 達する (またはリソースリミットを修正する) まで実行を継続することはできま す。 rlimit 構造体を使用してリソースのハードリミットとソフトリミットを指 定できます。

struct rlimit {

rlim_t

rlim_cur;

/* 現在の (ソフト) リミット */

rlim_t

rlim_max;

/* rlim_cur の最大値 */

};

スーパユーザだけがリミットの最大値を大きくできます。他のユーザは 0 から rlim_max の範囲内で rlim_cur を変更するか、または rlim_max を下げられるだ けです (撤回はできません)。

リミットを ‘‘無制限’’ にする値は RLIM_INFINITY として定義されます。

この情報はプロセスごとの情報に保存されるので、シェルが将来作成するすべて のプロセスにこのシステムコールが影響を及ぼすためには、このシステムコール をシェルが直接実行する必要があります。このため limitcsh(1) の組み込み コマンドになっているのです。

システムは、通常の方法でリミットを超えようとするときに、データまたはス タック空間を延長することを拒絶します。データ空間リミットに到達すると brk(2) 関数は処理に失敗します。スタックリミットに到達すると、プロセスはセ グメント例外 (SIGSEGV) を受信します。シグナルスタックを使用するハンドラに よってこのシグナルが捕捉されない場合、このシグナルはプロセスを抹消しま す。

プロセスのソフトリミットより大きなファイルを作成するファイルの入出力操作 をすると書込みは失敗し、シグナル SIGXFSZ が生成されます。通常、これによっ てプロセスは終了しますが、捕捉することもできます。 CPU 時間のソフトリミッ トを越えたとき、シグナル SIGXCPU が障害を起こしているプロセスに送信されま す。

戻り値

成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。

エラー

getrlimit() および setrlimit() システムコールは次の場合に失敗します:

       [EFAULT]

rlp で指定したアドレスが不正です。

[EPERM]
setrlimit
() に指定されたリミットがリミットの最大値を上 昇させようとしましたが、呼び出し側はスーパユーザではあ りません。

関連項目

csh(1), quota(1), quotactl(2), sigaltstack(2), sigvec(2), sysctl(3), ulimit(3)

歴史

getrlimit() システムコールは 4.2BSD ではじめて登場しました。

FreeBSD 10.0 June 13, 2004 FreeBSD 10.0

スポンサーリンク