资源限制一般在task_struct->singal->rlim结构体数组内
struct rlimit {
__kernel_ulong_t rlim_cur; //当前限制值
__kernel_ulong_t rlim_max; //最大限制值
};
一共存在16组资源
#define RLIMIT_CPU 0 进程每秒使用的cpu时间,如果超过了这个值内核会给进程发送一个SIGXCPU信号如果还不终止则再发送一个SIGKILL信号
#define RLIMIT_FSIZE 1 文件大小的最大值,如果进程试图把一个文件的大小扩充到大于这个值则内核会发送SIGXFSZ信号
#define RLIMIT_DATA 2 堆大小的最大值,在扩充进程堆之前检查这个值
#define RLIMIT_STACK 3 栈大小的最大值,内核扩充进程的用户态堆栈之前检查这个值
#define RLIMIT_CORE 4 异常退出进程内存转储文件的大小,当一个进程异常终止时内核在进程的当前目录下创建内存信息转储文件之前检查这个值
#ifndef RLIMIT_RSS
# define RLIMIT_RSS 5 进程所能拥有的页框最大数
#endif
#ifndef RLIMIT_NPROC
# define RLIMIT_NPROC 6 用户所能拥有的进程最大数
#endif
#ifndef RLIMIT_NOFILE
# define RLIMIT_NOFILE 7 打开文件描述符最大数
#ifndef RLIMIT_MEMLOCK
# define RLIMIT_MEMLOCK 8 非交换内存的最大值,当进程试图调用mlock、mlockall系统调用锁住一个页框时内核检查这个值
#endif
#ifndef RLIMIT_AS
# define RLIMIT_AS 9 进程地址空间的最大数,当进程使用malloc等相关函数扩充进程自己的地址空间时,内核检查这个值
#endif
#define RLIMIT_LOCKS 10 文件锁最大值
#define RLIMIT_SIGPENDING 11 进程挂起信号的最大值
#define RLIMIT_MSGQUEUE 12 posix消息队列中的最大值
#define RLIMIT_NICE 13 对应进程的优先级nice值最大值
#define RLIMIT_RTPRIO 14 为 SCHED_RR 和 SCHED_FIFO 策略定义了非特权线程的静态优先级的上限
#define RLIMIT_RTTIME 15 指定根据实时调度策略调度的进程在不进行阻塞系统调用的情况下可能消耗的CPU时间(以微秒为单位)的限制
#define RLIM_NLIMITS 16
用户可以调用getrlimit和setrlimit调整进程的rlim_cur限制增加到rlim_max。只有超级用户能够改变rlim_max值