转自: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 2     /* data size */

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

#define  RLIMIT_STACK   3     /* stack size */

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

#define  RLIMIT_CORE 4     /* core file size */

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

#define  RLIMIT_RSS  5     /* resident set size */

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

#define  RLIMIT_MEMLOCK 6     /* 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(版权归作者所有)

转载于:https://www.cnblogs.com/sky-heaven/p/7017199.html

linux资源限制函数getrlimit,setrlimit(转载)【转】相关推荐

  1. linux资源隔离是哪些,【转载】Linux cgroup资源隔离各个击破之

    Linux cgroup 有两个子系统支持CPU隔离. 一个是cpu子系统,另一个是cpuset子系统. cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法 .1. 完全公平调度 Com ...

  2. 3进程状态getrlimit()函数和setrlimit()函数

     1修改进程资源限制,软限制可改,最大值不能超过硬限制,硬限制只有root用户可以修改 查看进程资源限制 cat /proc/self/limits ulimit -a 2getrlimit()函 ...

  3. linux下syscall函数,SYS_gettid,SYS_tgkill

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

  4. C语言API函数大全(转载)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u010258235/article/d ...

  5. [C++] 为什么Linux需要itoa函数

    char buf[100]; for (int i = 0; i < 10000000; i++) {     itoa(12345, buf, 10); } 这段代码将耗时327毫秒. cha ...

  6. linux下system函数的深入理解

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

  7. Linux Kernel ‘_xfs_buf_find()’函数空指针引用拒绝服务漏洞

    漏洞名称: Linux Kernel '_xfs_buf_find()'函数空指针引用拒绝服务漏洞 CNNVD编号: CNNVD-201303-071 发布时间: 2013-03-06 更新时间: 2 ...

  8. linux 函数手册 在线,Linux系统API函数手册

    Linux系统API函数手册 (34页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 (一)文件操作篇 1.creat(建立文件)头文件1 ...

  9. Linux Kernel ‘mp_get_count()’函数本地信息泄露漏洞

    漏洞名称: Linux Kernel 'mp_get_count()'函数本地信息泄露漏洞 CNNVD编号: CNNVD-201311-054 发布时间: 2013-11-06 更新时间: 2013- ...

最新文章

  1. Pandas中iloc、loc、ix三者的区别
  2. client-go使用实例
  3. mysql 添加int列_在MySQL中现有的int列的值中添加字符?
  4. linux安装完怎么分区,Linux系统安装模式下硬盘分区怎么做?
  5. 欧拉公式cos_对复数,复数平面以及欧拉公式的理解
  6. 【理论】数据结构----树的基本概念
  7. 腾讯视频怎么禁止别人登录我的会员
  8. DEEPIN搭建J2EE时遇到This program requires DISPLAY en...
  9. 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)
  10. Word如何添加楷体_GB2312
  11. TransformerEncoder
  12. 触摸屏 java_价值10W大洋的触摸屏技术揭秘。。。
  13. 洛谷P1179 [NOIP2010 普及组] 数字统计题解
  14. “开宝五子棋陪练”-首款开放智能的五子棋习题练习安卓应用
  15. VM ware安装Cent OS系统并配置静态IP
  16. 影视后期制作学习(AE)(时钟动画制作)
  17. c语言编程练习题及答案
  18. 夫妻财产公证有法律效力吗
  19. django 验证和授权系统
  20. 如何用C语言编写舵轮底盘控制

热门文章

  1. Spring Data 开发环境搭建(二)
  2. iOS开发日记9-终端命令
  3. 关于mysql_free_result和mysql_close的解惑
  4. CSS的float和position
  5. 转载:面向站长和网站管理员的Web缓存加速指南
  6. Ubuntu学习日记--Lesson2:创建、重命名、删除文件及文件夹,强制清空回收站方法
  7. C++ Primer Plus学习(六)——分支语句和逻辑运算符
  8. mybatis mysql 模糊查询语句_mybatis+Spring mysql的模糊查询问题
  9. mysql lastid_轻松掌握MySQL函数中的last_insert_id()
  10. 用lstm模型做预测_深度学习模型 CNN+LSTM 预测收盘价