VLIMIT(3)

名称
vlimit - システムリソース消費の最大値を制御

書式
#include <sys/vlimit.h> vlimit(resource, value)

解説
このインタフェースは、getrlimit(2) によって置き換えられました。 この関数は、互換性ライブラリ、libcompat から使用できます。

現在のプロセスおよびそれが作成する各プロセスによる個別の消費量が、 指定された resource について value を超えないように制限します。 value が -1 に指定されている場合は、現在の限界値が返され、 限界値は変更されません。 現在のところ制御可能なリソースは次の通りです。

LIM_NORAISE
    擬似限界値。非ゼロの値に設定しても、限界値は引き上げられない場合があります。 noraise 制限を削除することができるのは、スーパーユーザーのみです。

LIM_CPU
    各プロセスが使用する cpu 秒の最大数。

LIM_FSIZE
    作成できる最大の単一ファイル。

LIM_DATA
    sbrk(2) による data+stack 領域の プログラムテキストの終わりを超えた最大成長度。

LIM_STACK
    自動的に拡張されたスタック領域の最大サイズ。

LIM_CORE
    作成される最大のコアダンプのサイズ。

LIM_MAXRSS
    プログラムに割り当てられる物理的メモリ量(バイト)の ソフト限界値。メモリが不足する場合は、システムは宣言した LIM_MAXRSS を超えているプロセスからメモリを取り上げます。

この情報はプロセス毎の情報に保存されているので、このシステムコールを シェルにより将来作成されるすべてのプロセスに対して有効にするためには、 シェルによって直接実行する必要があります。従って、 limit は csh(1) の組み込みコマンドです。

通常のやり方では制限値を超えてしまう場合は、システムはデータまたは スタックスペースの拡張を拒否します。データスペース制限値に達した場合に brk(2) コールが失敗したり、スタック制限値に達した場合はそのプロセスは 中止されます(スタックを拡張できないので、シグナルを送る方法がありません!)。

大きすぎるファイルを作成するようなファイル I/O 操作を行うと、シグナル SIGXFSZ が生成されますが、これは通常はプロセスを終了させますが、 捕捉できる場合もあります。 cpu 時間の制限値を超えた場合は、シグナル SIGXFSZ が違反している プロセスに送られます。そのシグナルを処理する時間を許すために、 CPU 時間制限値を上げることにより 5 秒間の猶予がプロセスに与えられます。

参照
csh(1)

歴史
vlimit() 関数は、 4.2BSD に現れました。

バグ
LIM_NORAISE はもはや存在しません。 この関数は、未だに再実装されていません。