getrlimit和setrlimit函数

getrlimit和setrlimit函数

每个进程都有一组资源限制,它们中的一些可以被getrlimitsetrlimit函数查询和改变。

  #include <sys/resource.h>

  int getrlimit(int resource, struct rlimit *rlptr);

  int setrlimit(int resource, const struct rlimit 
*rlptr);

Both return: 0 if OK, nonzero on error

这两个函数中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 */
    };

三个改变资源限制的规则:

  1. 一个进程能改变它的软限制值小于等于它的硬限制值。
  2. 一个进程能降低它的硬限制值大于等于它的软限制值。对于普通用户这个过程是不可逆转的。
  3. 只有超级用户有能力提升硬限制值。

常量RLIM_INFINITY指定了无限量的限制。

resource参数值可以详见7.11的 FIGURE 7.15

资源限制可以影响调用的进程和从它那里继承的子进程。这意味着资源限制的设置需要内嵌到shell里,用于作用到我们所有的进程。Bourne shell、GNU Bourne-again shell和Korn shell内建了ulimit命令,C shell内建了limit命令。

发表回复