OSDN Git Service

e8d77347e094ad561da084f2abdb9437053bae8e
[linuxjm/LDP_man-pages.git] / release / man2 / getrlimit.2
1 .\" Hey Emacs! This file is -*- nroff -*- source.
2 .\"
3 .\" Copyright (c) 1992 Drew Eckhardt, March 28, 1992
4 .\" and Copyright (c) 2002, 2004, 2005, 2008 Michael Kerrisk
5 .\"
6 .\" Permission is granted to make and distribute verbatim copies of this
7 .\" manual provided the copyright notice and this permission notice are
8 .\" preserved on all copies.
9 .\"
10 .\" Permission is granted to copy and distribute modified versions of this
11 .\" manual under the conditions for verbatim copying, provided that the
12 .\" entire resulting derived work is distributed under the terms of a
13 .\" permission notice identical to this one.
14 .\"
15 .\" Since the Linux kernel and libraries are constantly changing, this
16 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
17 .\" responsibility for errors or omissions, or for damages resulting from
18 .\" the use of the information contained herein.  The author(s) may not
19 .\" have taken the same level of care in the production of this manual,
20 .\" which is licensed free of charge, as they might when working
21 .\" professionally.
22 .\"
23 .\" Formatted or processed versions of this manual, if unaccompanied by
24 .\" the source, must acknowledge the copyright and authors of this work.
25 .\"
26 .\" Modified by Michael Haardt <michael@moria.de>
27 .\" Modified 1993-07-23 by Rik Faith <faith@cs.unc.edu>
28 .\" Modified 1996-01-13 by Arnt Gulbrandsen <agulbra@troll.no>
29 .\" Modified 1996-01-22 by aeb, following a remark by
30 .\"          Tigran Aivazian <tigran@sco.com>
31 .\" Modified 1996-04-14 by aeb, following a remark by
32 .\"          Robert Bihlmeyer <robbe@orcus.ping.at>
33 .\" Modified 1996-10-22 by Eric S. Raymond <esr@thyrsus.com>
34 .\" Modified 2001-05-04 by aeb, following a remark by
35 .\"          Havard Lygre <hklygre@online.no>
36 .\" Modified 2001-04-17 by Michael Kerrisk <mtk.manpages@gmail.com>
37 .\" Modified 2002-06-13 by Michael Kerrisk <mtk.manpages@gmail.com>
38 .\"     Added note on nonstandard behavior when SIGCHLD is ignored.
39 .\" Modified 2002-07-09 by Michael Kerrisk <mtk.manpages@gmail.com>
40 .\"     Enhanced descriptions of 'resource' values for [gs]etrlimit()
41 .\" Modified 2003-11-28 by aeb, added RLIMIT_CORE
42 .\" Modified 2004-03-26 by aeb, added RLIMIT_AS
43 .\" Modified 2004-06-16 by Michael Kerrisk <mtk.manpages@gmail.com>
44 .\"     Added notes on CAP_SYS_RESOURCE
45 .\"
46 .\" 2004-11-16 -- mtk: the getrlimit.2 page, which formally included
47 .\" coverage of getrusage(2), has been split, so that the latter
48 .\" is now covered in its own getrusage.2.
49 .\"
50 .\" Modified 2004-11-16, mtk: A few other minor changes
51 .\" Modified 2004-11-23, mtk
52 .\"     Added notes on RLIMIT_MEMLOCK, RLIMIT_NPROC, and RLIMIT_RSS
53 .\"             to "CONFORMING TO"
54 .\" Modified 2004-11-25, mtk
55 .\"     Rewrote discussion on RLIMIT_MEMLOCK to incorporate kernel
56 .\"             2.6.9 changes.
57 .\"     Added note on RLIMIT_CPU error in older kernels
58 .\" 2004-11-03, mtk, Added RLIMIT_SIGPENDING
59 .\" 2005-07-13, mtk, documented RLIMIT_MSGQUEUE limit.
60 .\" 2005-07-28, mtk, Added descriptions of RLIMIT_NICE and RLIMIT_RTPRIO
61 .\" 2008-05-07, mtk / Peter Zijlstra, Added description of RLIMIT_RTTIME
62 .\"
63 .\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
64 .\"         all rights reserved.
65 .\" Translated 1997-02-22, HANATAKA Shinya <hanataka@abyss.rim.or.jp>
66 .\" Updated and Modified 2001-06-02, Yuichi SATO <ysato444@yahoo.co.jp>
67 .\" Updated and Modified 2001-08-18, Yuichi SATO
68 .\" Updated and Modified 2002-08-25, Yuichi SATO
69 .\" Updated and Modified 2004-01-17, Yuichi SATO
70 .\" Updated and Modified 2004-12-30, Yuichi SATO
71 .\" Updated and Modified 2005-09-10, Yuichi SATO
72 .\" Updated and Modified 2005-10-11, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
73 .\" Updated and Modified 2005-10-27, Akihiro MOTOKI
74 .\" Updated and Modified 2006-04-15, Akihiro MOTOKI, Catch up to LDP v2.29
75 .\" Updated 2008-08-08, Akihiro MOTOKI, LDP v3.05
76 .\" Updated 2008-10-13, Akihiro MOTOKI, LDP v3.11
77 .\"
78 .\"WORD:        resource                資源
79 .\"WORD:        limit                   制限
80 .\"
81 .TH GETRLIMIT 2 2010-09-26 "Linux" "Linux Programmer's Manual"
82 .SH 名前
83 getrlimit, setrlimit \- 資源の制限を取得/設定する
84 .SH 書式
85 .B #include <sys/time.h>
86 .br
87 .B #include <sys/resource.h>
88 .sp
89 .BI "int getrlimit(int " resource ", struct rlimit *" rlim );
90 .br
91 .BI "int setrlimit(int " resource ", const struct rlimit *" rlim );
92 .SH 説明
93 .BR getrlimit ()
94
95 .BR setrlimit ()
96 はそれぞれ資源 (resource) の制限 (limit) の設定と取得を行う。
97 各リソースには、それに対応するソフト・リミットとハード・リミットがある。
98 リミットは
99 .RB ( getrlimit ()
100
101 .BR setrlimit ()
102
103 .I rlim
104 引き数である)
105 .I rlimit
106 構造体で定義される:
107 .PP
108 .in +4n
109 .nf
110 struct rlimit {
111     rlim_t rlim_cur;  /* ソフト・リミット */
112     rlim_t rlim_max;  /* ハード・リミット
113                          (rlim_cur より小さくない) */
114 };
115
116 .fi
117 .in
118 ソフト・リミットは、カーネルが対応するリソースに対して課す制限値である。
119 ハード・リミットはソフト・リミットの上限として働く。
120 特権を持たないプロセスは、ソフト・リミットの値を
121 0 からハード・リミットの範囲に設定することと、
122 ハード・リミットを下げることのみができる
123 (一度下げたハードリミットは上げられない)。
124 特権プロセス (Linux では
125 .B CAP_SYS_RESOURCE
126 ケーパビリティ (capability) を持つプロセス) は
127 ソフト・リミットとハード・リミットを自由に変更できる。
128 .PP
129
130 .B RLIM_INFINITY
131 はリソースに制限がないことを表す
132 (この値は
133 .BR getrlimit ()
134 が返す構造体と
135 .BR setrlimit ()
136 に渡す構造体の両方で使用される)。
137 .PP
138 .I resource
139 は次のいずれか 1 つである。
140 .TP
141 .B RLIMIT_AS
142 プロセスの仮想メモリ (アドレス空間) の最大サイズ (バイト単位)。
143 .\" 2.0.27 / 2.1.12 以降。
144 この制限は
145 .BR brk (2),
146 .BR mmap (2),
147 .BR mremap (2)
148 の呼び出しに影響し、この制限を超えた場合は
149 エラー
150 .B ENOMEM
151 で失敗する。
152 また自動的なスタック拡張にも失敗する
153 (さらに
154 .BR sigaltstack (2)
155 を使った代替スタックを利用可能にしていなかった場合には、
156 .B SIGSEGV
157 を生成してそのプロセスを kill する)。
158 この値は \fIlong\fP 型なので、32 ビットの \fIlong\fP 型を持つマシンでは、
159 この制限は最大で 2 GiB になるか、この資源が無制限になる。
160 .TP
161 .B RLIMIT_CORE
162 .I core
163 ファイルの最大サイズ。
164 0 の場合、core ファイルは生成されない。
165 0 以外の場合、このサイズより大きいダンプは切り詰められる。
166 .TP
167 .B RLIMIT_CPU
168 CPU 時間の上限 (秒数)。
169 プロセスがソフト・リミットに達した場合に、
170 .B SIGXCPU
171 シグナルを送る。
172 このシグナルに対するデフォルトの動作は、プロセスの終了である。
173 ただしシグナルをキャッチして、ハンドラがメインプログラムに
174 制御を返すこともできる。
175 プロセスが CPU 時間を使い続けた場合は、
176 ハードリミットに達するまで 1 秒毎にプロセスに
177 .B SIGXCPU
178 を送り、
179 ハードリミットに達すると
180 .B SIGKILL
181 を送る。
182 ソフト・リミットを超過したときの動作は、
183 Linux 2.2 から 2.6 のものである。
184 ソフト・リミットを超えて CPU 時間を使い続けるプロセスの
185 扱い方についての実装は変化してきている。
186 このシグナルをキャッチする必要のある
187 移植性を考えたアプリケーションでは、
188 最初に
189 .B SIGXCPU
190 を受け取った時点で正しく終了すべきである。
191 .TP
192 .B RLIMIT_DATA
193 プロセスのデータセグメント
194 (初期化されたデータ・初期化されていないデータ・ヒープ) の最大値。
195 このリミットは
196 .BR brk (2)
197
198 .BR sbrk (2)
199 の呼び出しに影響する。
200 これらの関数は、このリソースのソフト・リミットに達すると、
201 エラー
202 .B ENOMEM
203 で失敗する。
204 .TP
205 .B RLIMIT_FSIZE
206 プロセスが作成できるファイルサイズの最大値。
207 このサイズを超えてファイルを拡張すると、
208 .B SIGXFSZ
209 シグナルを送る。
210 デフォルトでは、このシグナルはプロセスを終了する。
211 プロセスをキャッチすることもできるが、
212 関連するシステムコール
213 .RB ( write (2),
214 .BR truncate (2)
215 など) はエラー
216 .B EFBIG
217 で失敗する。
218 .TP
219 .BR RLIMIT_LOCKS " (初期の Linux 2.4 のみ)"
220 .\" 正確には Linux 2.4.0-test9 のみ。2.4.25 / 2.5.65 ではなくなっている。
221 このプロセスが実行できる
222 .BR flock (2)
223 ロック数と
224 .BR fcntl (2)
225 リース数の合計値を制限する。
226 .TP
227 .B RLIMIT_MEMLOCK
228 RAM 内にロックできるメモリの最大バイト数。
229 実際には、この制限はシステムページサイズの最も近い倍数に
230 切り捨てて丸められる。
231 この制限は
232 .BR mlock (2),
233 .BR mlockall (2),
234 .BR mmap (2)
235
236 .B MAP_LOCKED
237 操作に影響する。
238 Linux 2.6.9 以降では
239 .BR shmctl (2)
240 .B SHM_LOCK
241 操作にも影響する。
242 この操作は呼び出し元プロセスの実 (real) ユーザー ID にロックされる
243 共有メモリセグメント
244 .RB ( shmget (2)
245 を参照) の合計バイト数の最大値を設定する。
246 .BR shmctl (2)
247 .B SHM_LOCK
248 によるロックは、
249 .BR mlock (2),
250 .BR mlockall (2),
251 .BR mmap (2)
252
253 .B MAP_LOCKED
254 によって確立されるプロセス毎のメモリロックとは分けて数える。
255 1 つのプロセスはこの制限までのバイトをロックできる。
256 この制限には 2 つの種類がある。
257 2.6.9 より前の Linux カーネル では、
258 この制限は特権プロセスによってロックされるメモリの合計を制御していた。
259 Linux 2.6.9 以降では、特権プロセスがロックするメモリの合計に制限はなく、
260 代わりにこの制限は非特権プロセスがロックするメモリの合計に
261 適用されるようになった。
262 .TP
263 .BR RLIMIT_MSGQUEUE " (Linux 2.6.8 以降)"
264 呼び出し元プロセスの実ユーザー ID に対して、
265 POSIX メッセージキューのために確保できるバイト数の制限を指定する。
266 この制限は
267 .BR mq_open (3)
268 に対して適用される。
269 ユーザが作成した各々のメッセージキューのバイト数は
270 以下の式により計算され、(そのキューが削除されるまでの間)
271 この制限の計算対象に含められる。
272 .nf
273
274     bytes = attr.mq_maxmsg * sizeof(struct msg_msg *) +
275             attr.mq_maxmsg * attr.mq_msgsize
276
277 .fi
278 ここで
279 .I attr
280
281 .I mq_attr
282 構造体であり、
283 .BR mq_open (3)
284 の第 4 引き数として指定される。
285
286 .I "sizeof(struct msg_msg *)"
287 (Linux/i386 では 4 バイト) を含む最初の加数は、
288 ユーザーが長さ 0 のメッセージを無制限に作れないこと保証している
289 (このようなメッセージであっても、
290 記録のためのオーバーヘッドでシステムメモリを消費する)。
291 .TP
292 .BR RLIMIT_NICE " (Linux 2.6.12 以降, 下記の「バグ」の節も参照)"
293 .BR setpriority (2)
294
295 .BR nice (2)
296 を使って引き上げられるプロセスの nice 値の上限を指定する。
297 nice 値の実際の上限は
298 .I "20\ \-\ rlim_cur"
299 で計算される
300 (このような変な状況は、リソース制限値として負の数を指定できないため
301 発生する。通常、負の値は特別な意味を持っているからである。
302 例えば、通常は
303 .B RLIM_INFINITY
304 の値は \-1 である)。
305 .TP
306 .B RLIMIT_NOFILE
307 このプロセスがオープンできるファイルディスクリプタ数の最大値より
308 1 大きい値を指定する。
309 .RB ( open (2),
310 .BR pipe (2),
311 .BR dup (2)
312 などにより) この上限を超えようとした場合、エラー
313 .B EMFILE
314 が発生する
315 (歴史的に、BSD ではこの上限は
316 .B RLIMIT_OFILE
317 という名前となっている)。
318 .TP
319 .B RLIMIT_NPROC
320 呼び出したプロセスの実ユーザー ID で作成できる最大プロセス数
321 (より正確には Linux ではスレッド数)。
322 この上限に達すると、
323 .BR fork (2)
324 はエラー
325 .B EAGAIN
326 で失敗する。
327 .TP
328 .B RLIMIT_RSS
329 プロセスの resident set (RAM 上に存在する仮想ページの数) の
330 上限を (ページ数で) 指定する。
331 この制限は 2.4.30 より前でしか影響がなく、
332 .BR madvise (2)
333
334 .B MADV_WILLNEED
335 を指定した関数コールにしか影響しない。
336 .\" カーネル 2.6.12 の時点では、
337 .\" この制限はカーネル 2.6 ではまだ何も行わない。
338 .\" しかし、何をさせるかについては LKML で時々話題になっている。
339 .\"       -- MTK, Jul 05
340 .TP
341 .BR RLIMIT_RTPRIO " (Linux 2.6.12 以降, バグの節も参照)"
342 .BR sched_setscheduler (2)
343
344 .BR sched_setparam (2)
345 を使って設定できる、そのプロセスのリアルタイム優先度の上限を指定する。
346 .TP
347 .BR RLIMIT_RTTIME " (Linux 2.6.25 以降)"
348 リアルタイム・スケジューリング方針でスケジューリングされるプロセスが
349 ブロッキング型のシステムコールを呼び出さずに消費することのできる
350 CPU 時間の合計についての上限を (マイクロ秒単位で) 指定する。
351 この上限の目的のため、プロセスがブロッキング型のシステムコールを
352 呼び出す度に、消費された CPU 時間のカウントは 0 にリセットされる。
353 プロセスが CPU を使い続けようとしたが他のプロセスに置き換えられた
354 (preempted) 場合や、そのプロセスのタイムスライスが満了した場合、
355 そのプロセスが
356 .BR sched_yield (2)
357 を呼び出した場合は、CPU 時間のカウントはリセットされない。
358
359 ソフト・リミットに達すると、そのプロセスに
360 .B SIGXCPU
361 シグナルが送られる。そのプロセスがこのシグナルを捕捉するか
362 無視して、CPU 時間を消費し続けた場合には、
363 ハード・リミットに達するまで 1 秒に 1 回
364 .B SIGXCPU
365 が生成され続けることになる。
366 ハード・リミットに達した時点で、そのプロセスには
367 .B SIGKILL
368 シグナルが送られる。
369
370 この上限を意図的に使用するのは、暴走したリアルタイム・プロセスを
371 停止して、システムが動かなくなるのを避ける場合である。
372 .TP
373 .BR RLIMIT_SIGPENDING " (Linux 2.6.8 以降)"
374 呼び出し元プロセスの実ユーザー ID に対して
375 キューに入れられるシグナルの数の制限を指定する。
376 この制限をチェックするため、
377 標準シグナルとリアルタイム・シグナルの両方がカウントされる。
378 しかし、この制限は
379 .BR sigqueue (2)
380 に対してしか強制されず、
381 .BR kill (2)
382 使うことで、そのプロセスに対してまだキューに入れられていない
383 シグナルのインスタンスをキューに入れることができる。
384 .\" これはカーネル 2.6.7 以前に存在するシステム全体の制限
385 .\" /proc/sys/kernel/rtsig-max を置き換える。MTK Dec 04
386 .TP
387 .B RLIMIT_STACK
388 プロセス・スタックの最大サイズをバイト単位で指定する。
389 この上限に達すると、
390 .B SIGSEGV
391 シグナルが生成される。
392 このシグナルを扱うためには、
393 プロセスは代りのシグナルスタック
394 .RB ( sigaltstack (2))
395 を使用しなければならない。
396
397 Linux 2.6.23 以降では、この制限はプロセスのコマンドライン引き数と環境変数
398 に使用される空間の合計サイズの上限の決定にも使用される。詳細については
399 .BR execve (2)
400 を参照。
401 .SH 返り値
402 成功した場合は 0 が返される。エラーの場合は \-1 が返され、
403 .I errno
404 に適切な値が設定される。
405 .SH エラー
406 .TP
407 .B EFAULT
408 .I rlim
409 がアクセス可能なアドレス空間の外を指している。
410 .TP
411 .B EINVAL
412 .I resource
413 が有効でない。
414 または、
415 .BR setrlimit ()
416 で、
417 .I rlim\->rlim_cur
418
419 .I rlim\->rlim_max
420 よりも大きかった。
421 .TP
422 .B EPERM
423 特権のないプロセスが
424 .BR setrlimit ()
425 を使用して
426 ソフト・リミットまたはハード・リミットを
427 現在のハード・リミットより大きくしようと試みた。
428 これを行うためには
429 .B CAP_SYS_RESOURCE
430 ケーパビリティが必要である。
431 または特権のないプロセスが
432 .BR setrlimit ()
433 を使用して
434 ソフトまたはハード
435 .B RLIMIT_NOFILE
436 リミットを現在のカーネルの最大値
437 .RB ( NR_OPEN )
438 以上に増加させようとした。
439 .SH 準拠
440 SVr4, 4.3BSD, POSIX.1-2001.
441 .B RLIMIT_MEMLOCK
442
443 .B RLIMIT_NPROC
444 は BSD から派生し、POSIX.1-2001 には指定されていない。
445 これらは BSD 系と Linux に存在するが、他の実装は少ない。
446 .R RLIMIT_RSS
447 は BSD から派生し、POSIX.1-2001 には指定されていない。
448 それにも関わらず多くの実装で存在する。
449 .BR RLIMIT_MSGQUEUE ,
450 .BR RLIMIT_NICE ,
451 .BR RLIMIT_RTPRIO ,
452 .BR RLIMIT_RTTIME ,
453 .B RLIMIT_SIGPENDING
454 は Linux 固有のものである。
455 .SH 注意
456 .BR fork (2)
457 で作成された作成された子プロセスは、
458 親プロセスのリソース制限を継承する。
459 .BR execve (2)
460 の前後でリソース制限は保存される。
461
462 シェルのリソース制限は、シェルの組み込みコマンドである
463 .I ulimit
464 .RB ( csh (1)
465 では
466 .I limit )
467 を使って設定することができる。
468 このシェルのリソース制限は、コマンドを実行してシェルが生成するプロセス
469 に引き継がれる。
470
471 古いシステムでは、
472 .BR setrlimit ()
473 と同様の目的を持つ関数
474 .BR vlimit ()
475 が提供されていた。
476 後方互換性のため、glibc でも
477 .BR vlimit ()
478 を提供している。
479 全ての新しいアプリケーションでは、
480 .BR setrlimit ()
481 を使用すべきである。
482 .SH バグ
483 以前の Linux カーネルでは、プロセスがソフトまたはハード
484 .B RLIMIT_CPU
485 リミットに達した場合に送られる
486 .B SIGXCPU
487
488 .B SIGKILL
489 シグナルが、本来送られるべき時点の 1 (CPU) 秒後に送られてしまう。
490 これはカーネル 2.6.8 で修正された。
491
492 2.6.17 より前の 2.6.x カーネルでは、
493 .B RLIMIT_CPU
494 リミットが 0 の場合、
495 .RB ( RLIM_INFINITY
496 と同じように) 「制限なし」と間違って解釈されていた。
497 Linux 2.6.17 以降では、リミットを 0 に設定した場合にも
498 効果を持つようになっているが、実際にはリミットの値は 1 秒となる。
499 .\" see http://marc.theaimsgroup.com/?l=linux-kernel&m=114008066530167&w=2
500
501 カーネル 2.6.12 には、
502 .B RLIMIT_RTPRIO
503 が動作しないというバグがある。この問題はカーネル 2.6.13 で修正されている。
504
505 カーネル 2.6.12 では、
506 .BR getpriority (2)
507
508 .B RLIMIT_NICE
509 が返す優先度の範囲が一つずれていた。このため、nice 値の実際の上限が
510 .I "19\ \-\ rlim_cur"
511 になってしまうという影響があった。これはカーネル 2.6.13 で修正された。
512 .\" 参考: http://marc.theaimsgroup.com/?l=linux-kernel&m=112256338703880&w=2
513
514 2.4.22 より前のカーネルでは、
515 .I rlim\->rlim_cur
516
517 .I rlim\->rlim_max
518 より大きかった場合、
519 .BR setrlimit ()
520 での
521 .B EINVAL
522 エラーを検出できない。
523 .SH 関連項目
524 .BR dup (2),
525 .BR fcntl (2),
526 .BR fork (2),
527 .BR getrusage (2),
528 .BR mlock (2),
529 .BR mmap (2),
530 .BR open (2),
531 .BR quotactl (2),
532 .BR sbrk (2),
533 .BR shmctl (2),
534 .BR sigqueue (2),
535 .BR malloc (3),
536 .BR ulimit (3),
537 .BR core (5),
538 .BR capabilities (7),
539 .BR signal (7)