tail head cat sleep
QR code linking to this page

manページ  — GETRLIMIT

名称

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

内容

ライブラリ

Standard C Library (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 が障害を起こしているプロセスに送信されます。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

getrlimit() および setrlimit() システムコールは次の場合に失敗します:
[EFAULT]
  rlp で指定したアドレスが不正です。
[EPERM]
  setrlimit() に指定されたリミットがリミットの最大値を上昇させようとしましたが、 呼び出し側はスーパユーザではありません。

関連項目

csh(1), quota(1), quotactl(2), sigaltstack(2), sigvec(2), sysctl(3), ulimit(3) [英語]

歴史

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

GETRLIMIT (2) June 13, 2004

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

The Unix phenomenon is scary. It doesn't go away.
— Steve Ballmer