getrlimit和setrlimit函数
每个进程都有一组资源限制,它们中的一些可以被getrlimit和setrlimit函数查询和改变。
|
这两个函数中single UNIX Specification中做为XSI扩展被定义。进程的资源限制是在系统初始化时由进程0建立的,然后由每个后续进程继承。每种实现都可以用自己的方法对各种限制做出调整。
每当调用这两个函数时,都会指定一个资源和一个指向如下结构的指针:
struct rlimit {
rlim_t rlim_cur; /* soft limit: current limit */
rlim_t rlim_max; /* hard limit: maximum value for rlim_cur */
};
|
三个改变资源限制的规则:
- 一个进程能改变它的软限制值小于等于它的硬限制值。
- 一个进程能降低它的硬限制值大于等于它的软限制值。对于普通用户这个过程是不可逆转的。
- 只有超级用户有能力提升硬限制值。
常量RLIM_INFINITY指定了无限量的限制。
resource参数值可以详见7.11的 FIGURE 7.15
资源限制可以影响调用的进程和从它那里继承的子进程。这意味着资源限制的设置需要内嵌到shell里,用于作用到我们所有的进程。Bourne shell、GNU Bourne-again shell和Korn shell内建了ulimit命令,C shell内建了limit命令。