转自:http://blog.csdn.net/stormkey/article/details/5890512

版权声明:本文为博主原创文章,未经博主允许不得转载。

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中找到它们:

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

RLIMIT_CPU资源限制指定一个进程可以取得CPU执行任务的毫秒数。一般地,一个进程仅仅有一个软限制而没有硬限制。如果超出软限制,进程会收到一个SIGXCPU信号。

 
  #define  RLIMIT_FSIZE 
 1 
   /* maximum
file size */

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

 
#define  RLIMIT_DATA

   /* data size
*/

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

 
#define  RLIMIT_STACK 
 3 
   /* stack size
*/

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

 
#define  RLIMIT_CORE

   /* core file
size */

RLIMIT_CORE限制指定了进程可以创建的最大core文件的大小。如果此限制设为0,将不能创建。另外,当达到此限制时,所有正在写core文件的进程都将被中断。

 
#define  RLIMIT_RSS  5 
   /* resident
set size */

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

 
  #define  RLIMIT_MEMLOCK

   /*
locked-in-memory address space */

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

 
  #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.sina.com.cn/s/blog_4abe3d0d010007k4.html?retcode=0(版权归作者所有)

linux资源限制函数getrlimit,setrlimit(转载)【转】的更多相关文章

  1. linux下iconv()函数的用法(转载并修改)

    linux shell 配置文件中默认的字符集编码为UTF-8 .UTF-8是unicode的一种表达方式,gb2312是和unicode都是字符的编码方式,所以说gb2312跟utf-8的概念应该不 ...

  2. C++资源之不完全导引 (转载)

    C++资源之不完全导引(完整版)- - 这文章太强了,我一定要转载,否则对不起观众,对不起自己.(liigo) 发信人: NULLNULL (空空), 信区: VC标  题: C++资源之不完全导引( ...

  3. Linux常用系统函数

    Linux常用系统函数 一.进程控制 fork 创建一个新进程clone 按指定条件创建子进程execve 运行可执行文件exit 中止进程_exit 立即中止当前进程getdtablesize 进程 ...

  4. Linux C 创建目录函数mkdir相关(转-清新居士)

    I.Linux C 创建目录函数mkdir的mode设置问题 函数原型: #include <sys/stat.h> int mkdir(const char *path, mode_t ...

  5. linux下syscall函数,SYS_gettid,SYS_tgkill

    出处:http://blog.chinaunix.net/uid-28458801-id-4630215.html     linux下syscall函数,SYS_gettid,SYS_tgkill  ...

  6. 对于linux下system()函数的深度理解(整理)

    原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...

  7. linux进程地址空间详解(转载)

    linux进程地址空间详解(转载) 在前面的<对一个程序在内存中的分析 >中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证.下面以Linux为例(实验结果显示window ...

  8. 转:对于linux下system()函数的深度理解(整理)

    这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为 ...

  9. Linux环境fork()函数详解

    Linux环境fork()函数详解 引言 先来看一段代码吧, 1 #include <sys/types.h> 2 #include <unistd.h> 3 #include ...

随机推荐

  1. POJ 2441 状压DP

    Arrange the Bulls Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 5289   Accepted: 2033 ...

  2. perl连接mysql数据库

    首先需要安装 ppm install DBD::mysql use strict; use DBI; my $host = "localhost"; # 主机地址 my $driv ...

  3. python基础之正则表达式和re模块

    正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  4. 关于DIV内文字垂直居中的写法

    最近在写UI,或多或少用到了CSS,在这记录一下,今天用到的DIV内文字垂直居中的写法, 因为所做的项目都是基于WebKit内核浏览器演示的,所以我们今天采用的是-webkit-box的写法: dis ...

  5. Java线程和多线程(五)——单例类中的线程安全

    单例模式是最广泛使用的创建模式之一.在现实世界之中,诸如Databae的连接或者是企业信息系统(EIS)等,通常其创建都是受到限制的,应该尽量复用已存在对象而不是频繁创建销毁.为了达到这个目的,开发者 ...

  6. 3226: [Sdoi2008]校门外的区间

    链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U ...

  7. Android log 引发的血案

    今天调试代码,我打印了一个东西: Log.d("WelcomeActivity", res.str); 结果总是代码执行不到这一行的下一行,程序也没有挂掉.后来,我自己去想各种可能 ...

  8. ListView, GirldList 等setCurrentItem 不立即刷新

    有时候,你调用了adapter的setCurrentItem,然后立马就去获得第一个view的坐标,那么你获取的不是最新的. 要知道程序的并行性.程序运行很快,所以,延迟200s去得到第一个view的 ...

  9. Active Directory 域服务 (AD DS) 虚拟化

    TechNet 库 Windows Server Windows Server 2012 R2 和 Windows Server 2012 服务器角色和技术 Active Directory Acti ...

  10. 点击事件处理, 以及hitTest:withEvent:实现

    发送触摸事件后, 系统会将事件添加到系统UIApplication的事件管理队列中 UIApplication会在事件队列的最前端取出事件,然后分发下去,以便处理, 通常会把事件首先分发给KeyWin ...