.\" Copyright (c) 1980, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)getrlimit.2 8.1 (Berkeley) 6/4/93 .\" %FreeBSD: src/lib/libc/sys/getrlimit.2,v 1.23 2004/07/02 23:52:13 ru Exp % .\" .\" $FreeBSD$ .Dd June 13, 2004 .Dt GETRLIMIT 2 .Os .Sh 名称 .Nm getrlimit , .Nm setrlimit .Nd 最大システムリソース消費を制御する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/time.h .In sys/resource.h .Ft int .Fn getrlimit "int resource" "struct rlimit *rlp" .Ft int .Fn setrlimit "int resource" "const struct rlimit *rlp" .Sh 解説 現在のプロセス、およびそれが作成する各プロセスによるシステムリソースの 消費限度は、 .Fn getrlimit システムコールで取得することができ、 .Fn setrlimit システムコールで設定できます。 .Pp .Fa resource 引数は次のうちの 1 つです: .Bl -tag -width RLIMIT_FSIZEAA .It Dv RLIMIT_AS プロセスがマップすることを許可される仮想メモリ の最大量 (バイト単位)。 .It Dv RLIMIT_CORE 作成できる .Xr core 5 ファイルの最大サイズ (バイト単位)。 .It Dv RLIMIT_CPU 各プロセスが使用する CPU 時間の最大量 (秒単位)。 .It Dv RLIMIT_DATA プロセス用のデータセグメントの最大サイズ (バイト単位)。 これは、プログラムがそのブレークを .Xr sbrk 2 関数でどのくらい遠くまで延長できるかを定義します。 .It Dv RLIMIT_FSIZE 作成できるファイルの最大サイズ (バイト単位)。 .It Dv RLIMIT_MEMLOCK プロセスが .Xr mlock 2 システムコールを使用して、プロセスをメモリにロックできる 最大サイズ (バイト単位)。 .It Dv RLIMIT_NOFILE このプロセスが開けるファイルの最大数。 .It Dv RLIMIT_NPROC このユーザ ID が同時に利用できるプロセスの最大数。 .It Dv RLIMIT_RSS 増加させて良いプロセスの常駐セットサイズの最大サイズ (バイト単位)。 これはプロセスに与えられる物理メモリの量に制限を課します。 メモリが逼迫してシステムがメモリを回収する際に、 宣言された常駐セットサイズを越えるプロセスを回収対象として選択します。 .It Dv RLIMIT_SBSIZE このユーザが使用できるソケットバッファの最大サイズ (バイト単位)。 このサイズは、ユーザがいつでも保持できるネットワークメモリ量を 制限します。 したがって mbuf の使用量も制限されます。 .It Dv RLIMIT_STACK プロセスのスタックセグメントの最大サイズ (バイト数)。 これによって、 プログラムのスタックセグメントをどのくらい延長できるか定義できます。 スタック延長はシステムによって自動的に実行されます。 .El .Pp リソースリミットはソフトリミットおよびハードリミットとして指定されます。 ソフトリミットを越えた場合、プロセスはシグナルを受信する可能性があります (例えば、CPU 時間またはファイルサイズを越えた場合) が、 ハードリミットに到達する (またはリソースリミットを修正する) まで実行を継続することはできます。 .Vt rlimit 構造体を使用してリソースのハードリミットとソフトリミットを指定できます。 .Bd -literal -offset indent struct rlimit { rlim_t rlim_cur; /* 現在の (ソフト) リミット */ rlim_t rlim_max; /* rlim_cur の最大値 */ }; .Ed .Pp スーパユーザだけがリミットの最大値を大きくできます。 他のユーザは 0 から .Fa rlim_max の範囲内で .Fa rlim_cur を変更するか、または .Fa rlim_max を下げられるだけです (撤回はできません)。 .Pp リミットを .Dq 無制限 にする値は .Dv RLIM_INFINITY として定義されます。 .Pp この情報はプロセスごとの情報に保存されるので、 シェルが将来作成するすべてのプロセスに このシステムコールが影響を及ぼすためには、 このシステムコールをシェルが直接実行する必要があります。 このため .Ic limit は .Xr csh 1 の組み込みコマンドになっているのです。 .Pp システムは、通常の方法でリミットを超えようとするときに、 データまたはスタック空間を延長することを拒絶します。 データ空間リミットに到達すると .Xr brk 2 関数は処理に失敗します。 スタックリミットに到達すると、プロセスはセグメント例外 .Pq Dv SIGSEGV を受信します。 シグナルスタックを使用するハンドラによって このシグナルが捕捉されない場合、このシグナルはプロセスを抹消します。 .Pp プロセスのソフトリミットより大きなファイルを 作成するファイルの入出力操作をすると書込みは失敗し、シグナル .Dv SIGXFSZ が生成されます。 通常、これによってプロセスは終了しますが、捕捉することもできます。 CPU 時間のソフトリミットを越えたとき、シグナル .Dv SIGXCPU が障害を起こしているプロセスに送信されます。 .Sh 戻り値 .Rv -std .Sh エラー .Fn getrlimit および .Fn setrlimit システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EFAULT .Fa rlp で指定したアドレスが不正です。 .It Bq Er EPERM .Fn setrlimit に指定されたリミットがリミットの最大値を上昇させようとしましたが、 呼び出し側はスーパユーザではありません。 .El .Sh 関連項目 .Xr csh 1 , .Xr quota 1 , .Xr quotactl 2 , .Xr sigaltstack 2 , .Xr sigvec 2 , .Xr sysctl 3 , .Xr ulimit 3 .Sh 歴史 .Fn getrlimit システムコールは .Bx 4.2 ではじめて登場しました。