`
javatoyou
  • 浏览: 1081548 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

getrlimit Unix系统函数

 
阅读更多

Unix系统函数

名称

  getrlimit,setrlimit - 控制系统资源的最大使用量。[1]‍‍[2]

大纲

  #include <sys/resource.h>

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

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

描述

  在操作系统中,我们能够通过函数getrlimit()、setrlimit()分别获得、设置每个进程能够创建的各种系统资源的限制使用量。

  调用getrlimit()或者setrlimit()来操作指定资源的操作上限。资源限制是一对值:一个指定了当前(软)限制,另一个则代表一个最大(硬)限制。软限制能够被一个进程改变,只要保证它不大于硬限制。一个进程能够(不能够撤回的)降低它的硬件限制,前提是大于等于软限制。仅当一个进程工作在一个系统超级用户权限下时能够提高它的硬件限制。调用setrlimit()来改变硬限制和软限制。限制值可能是一个“无穷大”值:RLIM_INFINITY。参数rlp是一个指向结构体rlimit的指针,该结构体包含如下成员:

  rlim_t rlim_cur; /*当前(软)限制*/

  rlim_t rlim_max; /*硬限制*/

  类型rlim_t是一个算术数据类型,等同于类型int,size_t,和off_t。

  资源限制类型概要描述如下:

  RLIMIT_CORE

  core文件的最大字节数,若其值为0则阻止创建core文件。

  RLIMIT_CPU

  CPU时间的最大量值(秒),当超过此软限制时,向该进程发送S I G X C P U信号。

  RLIMIT_DATA

  一个进程的数据段最大字节长度。数据段中初始化数据、非初始化数据以及堆的总和。当调用函数brk动态改变一个进程的数据段大小时,若失败,errno值将被设置为ENOMEM。

  RLIMIT_FSIZE

  可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送SIGXFSZ信号。

  RLIMIT_NOFILE

  每个进程能打开的最多文件数。

  RLIMIT_STACK

  栈的最大字节长度。系统不会动态增加栈的大小限制。

  在进程内部,setrlimit()将增加限制以适合您的栈大小,而不会移动当前内存段来允许增长。为了保证进程的栈能够增长,限制必须首先改变以适应运行进程使用的新栈大小。

  在一个多线程的进程中,若在线程中调用setrlimit(),而该线程不是主线程,则对于栈的限制没有任何改变。使用参数RLIMIT_STACK来调用setrlimit()仅仅能够影响主线程的栈,并且该工作本来就应该由主线程来完成。

  当超越栈大小限制时,信号SIGSEGV会发给进程。如果进程忽略该信号,或者捕捉该信号但是没有设置处理措施,该信号默认设置为SIG_DFL处理方案。

  RLIMIT_VMEM

  可映照地址空间的最大字节长度。

  RLIMIT_AS

  进程可用内存最大字节数。

  因为限制信息存储在每个进程的信息中,shell创建限制命令必须直接调用这两个系统函数来影响该shell以后创建的所有进程。

  下面资源当前限制的值会影响相对应宏定义的展开。

  限制 宏定义展开

  RLIMIT_FSIZE FCHR_MAX

  RLIMIT_NOFILE OPEN_MAX

  当使用函数getrlimit(),如果一个资源限制能够被正确赋值为类型rlim_t,则该值将被返回;否则,如果该资源限制等同于相应的硬件限制,返回值是RLIM_SAVED_MAX;否则返回值是RLIM_SAVED_CUR。

  当使用函数setrlimit(),如果请求新的限制值为RLIM_INFINITY,新的限制将是“无限制”;否则如果请求的新的限制为RLIM_SAVED_MAX,新的限制将被保存为硬件限制;如果请求的新的限制为RLIM_SAVED_CUR,新的限制将被保存为软限制;否则新的限制将赋值为请求的值。另外,如果相应传入的限制值正确,则该限制将作为新的限制值。

  设置一个限制为RLIM_SAVED_MAX或者RLIM_SAVED_CUR的结果是未知的,除非在之前调用getrlimit以了解相应的软限制或者硬限制值。

  一个限制允许其值大于RLIM_INFINITY。

返回值

  成功完成后,getrlimit()和setrlimit()返回0。否则,返回-1并设置errno指定相应错误。

错误‍

  函数getrlimit()和函数setrlimit()失败情况如下:

  EFAULT

  参数rlp指向非法地址。

  EINVAL

  指定了一个无效的资源;或者在调用函数setrlimit()时新的rlim_cur值超过了新的rlim_max值。

  EPERM

  调用函数setrlimit试图增加最大限制值,但该进程并不属于超级用户。

  函数setrlimit可能失败情况:

  EINVAL

  指定的限制值不能去减低限制值因为当前用法已经大于该指定限制值。

分享到:
评论

相关推荐

    UNIX环境高级编程(PDF)

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别...

    UNIX环境高级编程

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    UNIX环境高级编程(第二版中文).pdf

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX环境高级编程.pdf

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX环境高级编程_第二版中文

    7.11 getrlimit和setrlimit函数  7.12 小结  习题  第8章 进程控制  8.1 引言  8.2 进程标识符  8.3 fork函数  8.4 vfork函数  8.5 exit函数  8.6 wait和waitpid函数  8.7 waitid函数  8.8 ...

    unix环境编程电子书

    147 7.4 命令行参数 151 7.5 环境表 152 7.6 C程序的存储空间布局 152 7.7 共享库 154 7.8 存储器分配 154 7.9 环境变量 157 7.10 setjmp和longjmp函数 159 7.11 getrlimit和setrlimit函数 ...

    UNIX环境高级编程 pdf格式

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX环境高级编程第二版

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX环境高级编程(中文版+英文版+源代码)

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX高级编程 计算机科学丛书

    本书说明Unix系统的程序设计界面—系统调用界面和标准C提供的很多函数。这些对编写在Unix系统中运行的程序是非常有帮助的。 与大多数操作系统一样,Unix对程序运行提供了大量的服务—打开文件、读文件、启动一道新...

    UNIX环境高级编程(第二版中文)

    7.11 getrlimit和setrlimit函数 164 7.12 小结 168 习题 168 第8章 进程控制 171 8.1 引言 171 8.2 进程标识符 171 8.3 fork函数 172 8.4 vfork函数 176 8.5 exit函数 178 8.6 wait和waitpid函数...

    Unix高级编程 pdf

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 ...

    UNIX环境高级编程中文版

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    UNIX环境高级编程_第2版.part2

    7.11 getrlimit和setrlimit函数164 7.12 小结168 习题168 第8章进程控制171 8.1 引言171 8.2 进程标识符171 8.3 fork函数172 8.4 vfork函数176 8.5 exit函数178 8.6 wait和waitpid函数179 8.7 waitid函数...

    UNIX环境高级编程 不扣分哦

    本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按...

    Unix环境高级编程电子书

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

    UNIX环境高级编程和源代码

    7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和...

Global site tag (gtag.js) - Google Analytics