内核资料收集
1. 进程资源限制
每个进程都有一组相关的资源限制,此限制指定了进程能使用的系统资源数量。
当前进程的资源限制存放在current->signal->rlim字段,即进程的信号描述符的一个字段。此字段是类型为rlimit结构数组,
每个资源限制对应一个元素:
struct rlimit {
unsigned long rlim_cur;
unsigned long rlim_max;
};
rlim_cur字段是当前资源限制。如,current->signal->rlim[RLIMIT_CPU],rlim_cur表示正运行进程所占用CPU时间的当前限制。
rlim_max字段是资源限制所允许的最大值。
RLIMIT_AS 地址空间最大数
RLIMIT_CORE 内存信息转储文件大小
RLIMIT_CPU 进程使用CPU的最长时间
RLIMIT_DATA 堆大小的最大值
RLIMIT_FSIZE 文件大小的最大值
RLIMIT_LOCKS 文件锁的最大值
RLIMIT_MEMLOCK 非交换内存的最大值
RLIMIT_MSGQUEUE POSIX消息队列中的最大字节数。
RLIMIT_NOFILE 打开文件描述符的最大数
RLIMIT_NPROC 用户能拥有的进程最大数
RLIMIT_RSS 进程所拥有的页框最大数
RLIMIT_SIGPENDING 进程挂起信号的最大数
RLIMIT_STACK 栈大小的最大值
2. 资源限制相关接口
getrlimit()/setrlimit()系统调用可以将资源的rlim_cur限制增加到rlim_max。超级用户(准确说是具有CAP_SYS_RESOURCE权能)
可以改变rlim_max或把rlim_cur设置成大于rlim_max的值。
多数资源限制包含值RLIMIT_INFINITY(0xffffffff),它意味着没有对应的资源施加用户限制。
系统管理员可以给一些资源选择施加更强的限制。用户注册进系统,内核就创建一个由超级用户拥有的进程,超级用户能调用
setrlimit()减少一个资源rlim_cur和rlim_max的值。随后同一进程执行一个login shell,该进程就变为由用户拥有。由用户创建的每一
个新进程都继承其父进程rlim数组的内容。
阅读(743) | 评论(0) | 转发(0) |