GETRLIMIT(2)

名前
getrlimit, getrusage, setrlimit - 資源の限界や使用量を取得/設定する

書式
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>

int getrlimit (int resource, struct rlimit *rlim);
int getrusage (int who, struct rusage *usage);
int setrlimit (int resource, const struct rlimit *rlim);

説明
getrlimit と setrlimit はそれぞれ資源(resource)の限界(limit)の設定と取得を行なう。 resource は以下のどれかである:

RLIMIT_CPU    /* CPU time in seconds */
RLIMIT_FSIZE    /* Maximum filesize */
RLIMIT_DATA    /* max data size */
RLIMIT_STACK    /* max stack size */
RLIMIT_CORE    /* max core file size */
RLIMIT_RSS    /* max resident set size */
RLIMIT_NPROC    /* max number of processes */
RLIMIT_NOFILE    /* max number of open files */
RLIMIT_MEMLOCK    /* max locked-in-memory address space*/

資源は限界を RLIM_INFINITY に設定した場合は限界無し(unlimited)にできる。 RLIMIT_OFILE は RLIMIT_NOFILE の BSD における名前である。

rlimit は以下のように定義される構造体である:

struct rlimit
{
	int	rlim_cur;
	int	rlim_max;
};

getrusage は現在の資源の使用量(usage)を返す。 whoには RUSAGE_SELF か RUSAGE_CHILDREN のどちらかを指定する。

struct rusage
{
	struct timeval ru_utime;	/* user time used */
	struct timeval ru_stime;	/* system time used */
	long	ru_maxrss;		/* maximum resident set size */
	long	ru_ixrss;		/* integral shared memory size */
	long	ru_idrss;		/* integral unshared data size */
	long	ru_isrss;		/* integral unshared stack size */
	long	ru_minflt;		/* page reclaims */
	long	ru_majflt;		/* page faults */
	long	ru_nswap;		/* swaps */
	long	ru_inblock;		/* block input operations */
	long	ru_oublock;		/* block output operations */
	long	ru_msgsnd;		/* messages sent */
	long	ru_msgrcv;		/* messages received */
	long	ru_nsignals;		/* signals received */
	long	ru_nvcsw;		/* voluntary context switches */
	long	ru_nivcsw;		/* involuntary context switches */
};

返り値
成功した場合はゼロが返される。エラーの場合は -1 が返され、 errno に適切な値が設定される。

エラー

EFAULT
    rlim または usage がアクセス可能なアドレス空間の外を指している。

EINVAL
    getrlimit または setrlimit が不正な resource で呼び出されたか、getrusage が不正な who で呼び出された。

EPERM
    スーパー・ユーザー以外が setrlimit() を使用してソフトまたはハード の限界を現在のハードの限界以上にしようと試みた。またはスーパー・ユーザー が RLIMIT_NOFILE を現在のカーネルの最大値以上に増加させようとした。

準拠
SVr4, BSD 4.3

関連項目
ulimit(2), quotactl(2)