GETRLIMIT(2) FreeBSD システムコールマニュアル GETRLIMIT(2)
名称
getrlimit, setrlimit − 最大システムリソース消費を制御する |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <sys/types.h> int |
getrlimit(int resource, struct rlimit *rlp); int |
setrlimit(int resource, const struct rlimit *rlp); |
解説 |
現在のプロセス、およびそれが作成する各プロセスによるシステムリソースの消 費限度は、 getrlimit() システムコールで取得することができ、 setrlimit() システムコールで設定できます。 resource 引数は次のうちの 1 つです: |
RLIMIT_AS
プロセスがマップすることを許可される仮想メモリの最大量 ( バイト単位)。 RLIMIT_CORE RLIMIT_CPU RLIMIT_DATA RLIMIT_FSIZE RLIMIT_MEMLOCK RLIMIT_NOFILE RLIMIT_NPROC RLIMIT_RSS RLIMIT_SBSIZE 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 として定義されます。 この情報はプロセスごとの情報に保存されるので、シェルが将来作成するすべて のプロセスにこのシステムコールが影響を及ぼすためには、このシステムコール をシェルが直接実行する必要があります。このため limit は csh(1) の組み込み コマンドになっているのです。 システムは、通常の方法でリミットを超えようとするときに、データまたはス タック空間を延長することを拒絶します。データ空間リミットに到達すると brk(2) 関数は処理に失敗します。スタックリミットに到達すると、プロセスはセ グメント例外 (SIGSEGV) を受信します。シグナルスタックを使用するハンドラに よってこのシグナルが捕捉されない場合、このシグナルはプロセスを抹消しま す。 プロセスのソフトリミットより大きなファイルを作成するファイルの入出力操作 をすると書込みは失敗し、シグナル SIGXFSZ が生成されます。通常、これによっ てプロセスは終了しますが、捕捉することもできます。 CPU 時間のソフトリミッ トを越えたとき、シグナル SIGXCPU が障害を起こしているプロセスに送信されま す。 |
戻り値
成功して終了したときには値 0 を返します。そうでない場合、値 -1 が返され、 グローバル変数 errno が設定されてエラーを示します。 |
エラー
getrlimit() および setrlimit() システムコールは次の場合に失敗します: |
[EFAULT]
rlp で指定したアドレスが不正です。 [EPERM] 関連項目 |
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 |