linux资源限制函数getrlimit,setrlimit

getrlimit,setrlimit函数

        getrlimit容许一个进程查询所受的的系统限制.这些系统限制经过一对硬/软限制对来指定。当一个软限制被超过期,进程还能够继续,固然这取决于限 制的类型,同时一个信号会发送给进程。另外一方面,进程不能够超过它的硬限制。软限制值能够被进程设置在位于0和最大硬限制间的任意值。硬限制值不能被任何 进程下降,仅仅超级用户能够增长之。

数据结构

 
#include <sys/types.h>
          #include <sys/time.h>
          #include <sys/resource.h>

    int  getrlimit(int resource, struct rlimit *rlp);
    int  setrlimit(int resource, const struct rlimit *rlp);

getrlimit和setrlimit都使用下面的数据结构: 并发

 
struct rlimit {
                rlim_t rlim_cur;
                rlim_t rlim_max;
        };

咱们来看每一个成员变量。rlim_cur 为指定的资源指定当前的系统软限制。rlim_max 将为指定的资源指定当前的系统硬限制。

        getrlimit和setrlimit函数的第一个参数是资源参数。这个参数用来指定进程获取信息的那个资源。可能的资源值列于下面。你也能够在/usr/include/sys/resource.h中找到它们: socket

 
#define  RLIMIT_CPU  0     /* cpu time in milliseconds */

RLIMIT_CPU资源限制指定一个进程能够取得CPU执行任务的毫秒数。通常地,一个进程仅仅有一个软限制而没有硬限制。若是超出软限制,进程会收到一个SIGXCPU信号。 ide

 
  #define  RLIMIT_FSIZE   1     /* maximum file size */

RLIMIT_FSIZE限制指定一个进程能够建立的最大文件大小,以字节为单位。好比,若是RLIMIT_FSIZE设置为0,那么进程将根本不能建立文件。若是进程超出此限制,就会发出SIGFSZ信号。 函数

 
#define  RLIMIT_DATA 2     /* data size */

RLIMIT_DATA 限制指定一个进程数据段可占据的最大字节值。一个进程的数据段就是放置动态内存的一个区域(C/C++中用malloc()分配的内存)。若是超出限制,分配新内存的操做将会遭到失败。 spa

 
#define  RLIMIT_STACK   3     /* stack size */

RLIMIT_STACK限制指定进程栈可占据的最大字节数。一旦超出硬限制,进程会收到SIGSEV信号。 .net

 
#define  RLIMIT_CORE 4     /* core file size */

RLIMIT_CORE限制指定了进程能够建立的最大core文件的大小。若是此限制设为0,将不能建立。另外,当达到此限制时,全部正在写core文件的进程都将被中断。 指针

 
#define  RLIMIT_RSS  5     /* resident set size */

RMIMIT_RSS限制了进程的常驻集大小(resident set size)可占据的最大字节数.这个进程的常驻集和进程所使用的物理内存数有关。 orm

 
  #define  RLIMIT_MEMLOCK 6     /* locked-in-memory address space */

RLIMIT_MEMLOCK限制指定了进程可使用系统调用到mlock进行锁定的最大字节数。 blog

 
  #define  RLIMIT_NPROC   7     /* number of processes */

RLIMIT_NPROC 限制指定了一个指定用户能够开启的最多并发进程数。这里的用户是经过进程来肯定的有效用户ID.

 
#define  RLIMIT_NOFILE  8     /* number of open files */

RLIMIT_NOFILE 限制指定了进程能够打开的最多文件数。

 
  #define  RLIMIT_SBSIZE  9     /* maximum size of all socket buffers */

RLIMIT_SBSIZE限制指定用户在任什么时候刻可以使用的mbufs数。能够查看socket man页来得到mbufs的定义。

 
#define  RLIMIT_VMEM 10    /* virtual process size (inclusive of mmap) */

RLIMIT_VMEM限制说明一个进程的映射地址空间能够占据的字节数。若是超出限制,分配动态内存和到mmap的调用会失败。

 
#define  RLIM_INFINITY

RLIM_INFINITY 宏用来去除对一个资源的限制。换句话说,将一个资源的硬限制设置为RLIM_INFINITY将会致使此种资源的使用没有任何系统限制。 将软限制设置为RLIM_INFINITY将会阻止进程收到任何软限制警告。若是你的进程不想为那些会致使进程在超过软限制时发送信号的资源设置一个信号 处理器,这个参数将变得很是有用。 若是使用了getrlimit参数,那么第二个参数须要设置为一个到rlimit结构的有效指针。而后 getrlimit会将适当的限制值放入此结构。另外,在改变限制时,setrlimit会使用在第二个参数中设置值。将值设置为0将会阻止使用此资源。 将值设置为RLIM_INFINITY会除去对该资源的全部限制。这些函数都在执行成功后都返回0,反之为-1.有任何错误产生,这些函数会相应的设置 errno。

http://blog.csdn.net/stormkey/article/details/5890512
相关文章
相关标签/搜索