rlimit Linux下限制资源的使用(Limiting Resource Usage)

本文介绍了在Linux环境下如何通过getrlimit和setrlimit等函数来限制进程资源使用,包括CPU时间、文件大小、内存和栈空间等,并解释了当前限制与最大限制的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Linux环境编程下,我们可以具体的限制一个进程对资源的使用,当进程尝试超过资源使用的限制,它可能会收到一个信号,或是因资源而失败的系统调用。每个进程最初的获得的限制来自父进程,但是后来可以更改这个限制。

有两个关于资源限制的概念:

current limit:为系统规定的上限,也叫做"soft limit",因为进程通常将被限制在这个范围内。

maxinum limit:为一个进程被允许建立current limit的最大值,也叫做"hard limit",因为一个进程无法避开它,一个进程低于他自己的maxinum limit,且只有超级用户可能提高它的maxinum limit。

struct rlimit {
rlim_t rlim_cur; //The current limit 
rlim_t rlim_max; //The maximum limit.
};

使用getrlimit,setrlimit,getrlimit64,setrlimit64(定义在<sys/resource.h>)来对上面两个值进行使用。

— Function: int getrlimit (int resource, struct rlimit *rlp)

   读取类型为resource的限制值,并储存在rlp中。

   返回值为0时成功,-1时失败。失败时可能将errno设置为EFAULT.

— Function: int setrlimit (int resource, const struct rlimit *rlp)

更新新的current limit 与 maxinum limit限制 ,参数resource为限制的类型(下方有参数表),*rlp带更新的结构体。

同样成功返回0,失败返回-1.将errno设置为EPERM有如下两种情况

1.设置的current limit 超过了maxinum limit的值。

    2.在不是超级用户的情况下设置了maxinum limit。

同时这里只提到

struct rlimit64{

rlim64_t rlim_cur;

//This is analogous to  rlimit.rlim_cur, but with a different type. 
rlim64_t rlim_max
//This is analogous to  rlimit.rlim_max, but with a different type.

}

下面是具体可以限制的种类也就是resource列表

RLIMIT_CPU   CPU使用时间限制,如果运行时间长于该值,将会收到信号:SIGXCPU 该值以秒计量

RLIMIT_FSIZE   进程可创建文件大小限制,如果进程尝试写更大的文件将会受到信号:SIGXFSZ

RLIMIT_DATA   最大内存使用限制,如果进程尝试分配内存并超出这个范围,分配函数将会失败

RLIMIT_STACK   进程使用栈的大小限制,如果进程尝试扩展它的栈并超过这个值,那个会收到信号SIGSEGV 

RLIMIT_CORE   进程创建core文件大小限制,如果进程结束并且要存储core文件高于该值,那么core文件不会被创建,所以设置这个值为0回保证core文件从不被创建

RLIMIT_RSS   进程所能得到的最大物理内存,这个参数是系统调度程序和内存分配的向导,系统在有盈余时将会给进程更多的内存

RLIMIT_MEMLOCK   在物理内存中最大被锁内存数

RLIMIT_NPROC   同一用户ID创建最大进程数,如果已经到达最大进程数再调用fork会失败

RLIMIT_NOFILE RLIMIT_OFILE   进程可开最大文件数,如果超出最大数将会失败,该值存在在GNU 和 4.4BSD,部分系统没有。
RLIMIT_AS   进程总共可获得的最大内存数,如果进程尝试分配更多内存,那么分配函数将会失败。
RLIM_NLIMITS   所有参数值的限制,以上任何参数值都不能高于该值

— Constant: rlim_t RLIM_INFINITY
该常量被定义为无穷,在调用setrlimit的时候


转载请注明出处谢谢

你不知道的SAM V系列MCU:SAM V MCU基于 ARM Cortex:trade_mark:-M7 的微控制器系列可提供最佳的连接接口组合,包括以太网 AVB、MediaLB、USB 和 CAN-FD,以及可提供高达 1500 CoreMark 的高性能 ARM Cortex-M 内核。SAM V MCU专注于音频放大器、汽车通信控制单元或车头单元的车载信息娱乐链接。 关键特性: 高性能—由于 Cortex-M7 能够以 300 MHz 的频率运行,外加前所未有的 DSP 性能,可实现高达 1500 CoreMark 先进的存储器架构— 高达 384 KB 的多端口存储器,其中高达 256 KB 可分配作为紧密耦合存储器(数据和指令),实现以 300 MHz 频率运行时零等待 以太网 AVB— SAM V71 在以太网 MAC 中嵌入了对音频视频桥接 (AVB) 的特定硬件支持。在 MAC 的硬件中实现了基于信用的流量整形,从而无需 CPU 干预 高速 USB— 主机和器件模式高速 USB 控制器集成了 PHY 以降低 BOM 成本 MOST 连接— MediaLB 3 线接口可无缝集成到 MOST 总线 音频接口— 灵活的 TDM/I2S 接口可以连接音频源、编解码器或 DSP CAN-FD— 最新的 CAN 2.0 和 CAN 灵活数据速率 (FD) 控制器可实现更高带宽 汽车等级— 通过 AEC-Q100 等级 2 (-40C/105C) 认证 2015年最新评估开发板——SAM V71 Xplained Atmel年初刚刚推出了基于SAM V71Xplained评估套件,目前已在官网发布出售。 开发板资源: 处理器:ATSAMV71Q21(ATSAMV71Q21数据手册) 用户:一个电源开关按钮、一个机械复位按钮、两个用户按钮、两个黄色LED指示灯 存储:2MB SDRAM、2MB QSPI Flash、256KByte EEPROM 网口:IEEE 802.3az 10Base-T/100Base-TX Ethernet RMII PHY 媒体接口:立体音频编解码器、相机接口、耳机和麦克风接口 SDIO接口SD连接器、CAN收发器 MediaLB接口 接口:外部调试连接器接口、一个扩展LCD接口、两个外部扩展接口、调试接口、虚拟COM口、USB接口 电源:外部电源输入、USB供电 用到的主要芯片: 基于 ARM Cortex:trade_mark:-M7 的微控制器:ATSAMV71Q21 AVR 32-bit RISC MCU:AT32UC3A4256J CAN收发器:ATA6561-GBQW 超低功耗、便携式音频编解码器:WM8904 IEEE 802.3az 10Base-T/100Base-TX Ethernet RMII PHY:KSZ8061RNBVA 2kbit I2C EEPROM:AT24MAC402-MAHM-T
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值