Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getrlimit(2) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

csh(1)

quota(2)

sigvec(2)

sigstack(2)

GETRLIMIT(2)  —  NEWS-OS Programmer’s Manual

名称

getrlimit, setrlimit − システムリソースの消費に関する制限値を取り出す/セットする

形式

#include <sys/time.h>
#include <sys/resource.h>

getrlimit(resource, rlp)
int resource;
struct rlimit ∗rlp;

setrlimit(resource, rlp)
int resource;
struct rlimit ∗rlp;

解説

現プロセスおよび現プロセスが作成する各プロセスによるシステムリソース の消費に関する制限値は、 getrlimit コールで得られ、 setrlimit コールでセットされます。

resource パラメータは、 次のうちの 1つです。

RLIMIT_CPU 各プロセスによって使用される最長CPU時間(秒数)。

RLIMIT_FSIZE 作成できる単一ファイルの最大サイズ(バイト数)。

RLIMIT_DATA 1つのプロセスのためのデータセグメントの最大サイズ(バイト数)。 これは、 プログラムが sbrk(2) システムコールを 用いて、 その break を どこまで拡張できるのかを 定義します。

RLIMIT_STACK 1つのプロセスのためのスタックセグメントの最大サイズ(バイト数)。 これは、 プログラムのスタックセグメントを どこまで拡張できるのかを 定義します。 スタックの拡張はシステムによって自動的に行われます。

RLIMIT_CORE 作成できる 1個の コア ファイルの最大サイズ(バイト数)。

RLIMIT_RSS 1つのプロセスの最大レジデントセットサイズ(バイト数)。 これは、 プロセスに与えられる物理的メモリの量に制限を 課すものです。 メモリに余裕がなくなると、 システムは宣言されているレジデントセットサイズを 超えているプロセスからメモリを 獲得します。

リソースの制限は、 ソフトリミットおよびハードリミットとして指定されます。 ソフトリミットを オーバー(例えば、 CPU時間を オーバー)すると、 プロセスは、 シグナルを 受け取りますが、 プロセスがハードリミットに達しない(または、 リソースの制限を 修正しない)限り、 実行を 継続することが許されます。 あるリソースに対してハードおよびソフトリミットを 指定するためには、 次のような rlimit 構造体が使用されます。

struct rlimit {
intrlim_cur;/∗ current (soft) limit ∗/
intrlim_max;/∗ hard limit ∗/
};

スーパーユーザだけが rlim_max を 引き上げることができます。 他のユーザは、 0から rlim_max までの範囲内で rlim_cur を 変更するか、 または rlim_max を 引き下げることしかできません。

制限の“無限”値は、 RLIM_INFINITY(0x7fffffff)として定義されます。

この情報は個別プロセス情報に収められているので、 シェルによって将来作成されるすべてのプロセスに影響を 及ぼすようにするためには、 このシステムコールはシェルによって直接実行されなければなりません。 そのため、 csh(1) には limit という組み込みコマンドが用意されています。

制限値を オーバーすると、 システムはデータスペースまたはスタックスペースの拡張を 拒絶します。 データスペースの制限値に達した場合には、 break コールは失敗します。 スタックスペースの制限値に達したときには、 プロセスはセグメンテーションフォールト(SIGSEGV)シグナルを 受け取ります。 このシグナルがシグナルスタックを 用いてハンドラによってキャッチされなければ、 このシグナルはプロセスを 終了させます。

大きすぎるファイルを 作成するファイル入出力オペレーションは、 シグナル SIGXFSZ を 発生させます。 通常、 このシグナルはプロセスを 終了させますが、 キャッチすることもできます。 CPU時間のソフトリミットを オーバーすると、 違反しているプロセスへシグナル SIGXCPU が送られます。

リターン値

正常終了時には、 リターン値 0 が返され、 リソースの制限値が変更されるか、 返されます。 リターン値 −1 はエラーが発生したことを 示し、 エラーコードがグローバル変数 errno に収められます。

エラー

次のエラーが発生することがあります。

[EFAULT] rlp に指定されたアドレスが無効である。

[EPERM] setrlimit で指定された制限値が最大制限値を 超えていて、 かつ、 呼び出しユーザがスーパーユーザではない。

関連事項

csh(1), quota(2), sigvec(2), sigstack(2)

バグ

csh だけではなく、 sh(1) にも limit および unlimit コマンドが必要です。

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026