aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man2/getrlimit.2
blob: 4cac0fccb12dfa86f3e6f41019995e45dd1abdb6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
.\" 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.10.2.4 2001/08/31 10:15:15 ru Exp %
.\"
.\" $FreeBSD: doc/ja_JP.eucJP/man/man2/getrlimit.2,v 1.6 2001/08/19 07:14:26 horikawa Exp $
.Dd June 4, 1993
.Dt GETRLIMIT 2
.Os
.Sh 名称
.Nm getrlimit ,
.Nm setrlimit
.Nd 最大システムリソース消費を制御する
.Sh ライブラリ
.Lb libc
.Sh 書式
.Fd #include <sys/types.h>
.Fd #include <sys/time.h>
.Fd #include <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 Li RLIMIT_CORE
作成できる
.Xr core 5
ファイルの最大サイズ (バイト単位)
.It Li RLIMIT_CPU
各プロセスが使用する CPU 時間の最大量 (秒単位)
.It Li RLIMIT_DATA
プロセス用のデータセグメントの最大サイズ (バイト単位)。
これは、プログラムがそのブレークを
.Xr sbrk 2
システムコールでどのくらい遠くまで延長できるかを定義します。
.It Li RLIMIT_FSIZE
作成できるファイルの最大サイズ (バイト単位)
.It Li RLIMIT_MEMLOCK
プロセスが
.Xr mlock 2
関数を使用して、プロセスをメモリにロックできる
最大サイズ (バイト単位)。
.It Li RLIMIT_NOFILE
このプロセスが開けるファイルの最大数
.It Li RLIMIT_NPROC
このユーザ ID が同時に利用できるプロセスの最大数
.It Li RLIMIT_RSS
増加させて良いプロセスの常駐セットサイズの最大サイズ (バイト単位)。
これはプロセスに与えられる物理メモリの量に制限を課します。
メモリが逼迫してシステムがメモリを回収する際に、
宣言された常駐セットサイズを越えるプロセスを回収対象として選択します。
.It Li RLIMIT_STACK
プロセスのスタックセグメントの最大サイズ (バイト数)。これによって、
プログラムのスタックセグメントをどのくらい延長できるか定義できます。
スタック延長はシステムによって自動的に実行されます。
.It Li RLIMIT_SBSIZE
このユーザが使用できるソケットバッファの最大サイズ (バイト単位)。
このサイズは、ユーザがいつでも保持できるネットワークメモリ量を
制限しますので、したがって mbuf の使用量も制限します。
.El
.Pp
リソースリミットはソフトリミットおよびハードリミットとして
指定されます。ソフトリミットを越えた場合、
プロセスはシグナルを受信する可能性があります
(例えば、CPU 時間またはファイルサイズを越えた場合) が、
ハードリミットに到達する (またはリソースリミットを修正する)
まで実行を継続することはできます。
.Em 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 戻り値
戻り値 0 は呼び出しが正常に完了し、リソースリミットを変更しているか、
またはリソースリミットを返していることを示します。
戻り値 -1 はエラーが起こったことを示し、
エラーコードはグローバル変数
.Va errno
に保存されます。
.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
.Sh 歴史
.Fn getrlimit
関数は
.Bx 4.2
ではじめて登場しました。