每一个进程都用一组资源限值,它们可以用来限制进程能够消耗的各种系统资源。getrlimit()和setrlimit()系统调用允许一个进程读取和修改自己的资源限制,其函数原型如下:
#include <sys/resource.h>
int getrlimit(int resource,struct rlimit *rlim);
int setrlimit(int resource,const struct rlimit *rlim);
Both return 0 on success,or -1 on error.
参数rlim用来存储限制值,其是一个包含两个字段的结构的指针。此两个字段对应于一种资源的两个关联限制:软限制(rlim_cur)和硬限制(rlim_max)。(rlim_t是一个整数类型)。软限制规定了进程能够消耗的资源数量;对大多数应用程序来说,硬限制的唯一作用就是为软限制设定上限。
struct rlimit{
rlim_t rlim_cur;
rlim_t rlim_max;
}
参数resource:其取值如下:
- RLIMIT_AS
规定了进程的虚拟内存的最大字节数,试图超出这个限制会得到ENOMEM错误提示。
- RLIMIT_CORE
规定了当进程被特定信号终止时产生的核心dump文件的最大字节数。
- RLIMIT_CPU
规定了进程最多使用的CPU时间。
- RLIMIT_DATA
规定了进程的数据段的最大字节数。
- RLIMIT_FSIZE
规定了进程能够创建的文件的最大字节数。
- RLIMIT_MEMLOCK
(Linux、BSD系统规定)规定了一个进程最多能够将多少字节的虚拟内存锁进物理内存以防止内存被交换出去。
- RLIMIT_MSGQUEUE
(自Linux2.6.8起,Linux系统特有)规定了能够为调用进程的真实用户ID的POSIX消息队列分配的最大字节数。
- RLIMIT_NICE
(Linux系统特有,自Linux2.6.12起)规定了使用sched_setscheduler()和nice()能够为进程设置的最大nice值。
- RLIMIT_NOFILE
限制规定了一个数值,该数值等于一个进程能够分配的最大文件描述符数量加1.
- RLIMIT_NPROC
规定调用进程的真实用户ID下最多能够创建的进程数量。(Linux和BSD系统提供此机制)
- RLIMIT_RSS
规定了进程驻留集中的最大页面数。
- RLIMIT_RTPRIO
规定使用sched_setscheduler()和sched_setparam()能够为进程设置的最高实时优先级(Linux系统专有)
- RLIMIT_RTTIME
规定了一个进程在实时调度策略中不睡眠的情况下最大能够消耗的CPU秒数。
- RLIMIT_SIGPENDING
规定了调用进程的只是用户ID下信号队列中最多能够容纳的信号数量。
- RLIMIT_STACK
规定了进程栈的最大字节数。