当前位置: 首页 > news >正文

linux下getrlimit()与setrlimit()函数说明及使用

1.getrlimit()/setrlimit()函数

获取或设置资源使用限制, linux 下每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用的进程只能将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY:表示不对资源限制。

用法:

头文件

#include <sys/resource.h>

函数

  1. int getrlimit(int resource, struct rlimit *rlim);

  2. int setrlimit(int resource, const struct rlimit *rlim);

struct rlimit结构体(描述软硬限制),原型如下:

  1. struct rlimit {

  2. rlim_t rlim_cur;

  3. rlim_t rlim_max;

  4. };

参数说明:

  1. resource:可能的选择有

  2. RLIMIT_AS //进程的最大虚内存空间,字节为单位。

  3. RLIMIT_CORE //内核转存文件的最大长度。

  4. RLIMIT_CPU //最大允许的CPU使用时间,秒为单位。当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。然而,可以捕捉信号,处理句柄可将控制返回给主程序。如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送 SIGKILL信号终止其执行。

  5. RLIMIT_DATA //进程数据段的最大值。

  6. RLIMIT_FSIZE //进程可建立的文件的最大长度。如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。

  7. RLIMIT_LOCKS //进程可建立的锁和租赁的最大值。

  8. RLIMIT_MEMLOCK //进程可锁定在内存中的最大数据量,字节为单位。

  9. RLIMIT_MSGQUEUE //进程可为POSIX消息队列分配的最大字节数。

  10. RLIMIT_NICE //进程可通过setpriority() 或 nice()调用设置的最大完美值。

  11. RLIMIT_NOFILE //指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。

  12. RLIMIT_NPROC //用户可拥有的最大进程数。

  13. RLIMIT_RTPRIO //进程可通过sched_setscheduler 和 sched_setparam设置的最大实时优先级。

  14. RLIMIT_SIGPENDING //用户可拥有的最大挂起信号数。

  15. RLIMIT_STACK //最大的进程堆栈,以字节为单位。

返回值说明:

  1. 成功执行时,返回0。失败返回-1,errno被设为以下的某个值

  2. EFAULT:rlim指针指向的空间不可访问

  3. EINVAL:参数无效

  4. EPERM:增加资源限制值时,权能不允许

2.修改task进程资源上限值(ulimit和setrlimit)

1)soft limit是指内核所能支持的资源上限。比如对于RLIMIT_NOFILE(一个进程能打开的最大文件数,内核默认是1024),soft limit最大也只能达到1024。对于RLIMIT_CORE(core文件的大小,内核不做限制),soft limit最大能是unlimited。
2)hard limit在资源中只是作为soft limit的上限。当你设置hard limit后,你以后设置的soft limit只能小于hard limit。要说明的是,hard limit只针对非特权进程,也就是进程的有效用户ID(effective user ID)不是0的进程。具有特权级别的进程(具有属性CAP_SYS_RESOURCE),soft limit则只有内核上限。

ubuntu 下ulimit指令对比

ulimit -c -n -s 软限制

ulimit -c -n -s -H 硬限制

备注:

1. unlimited表示no limit, 即内核的最大值

2. 当不指定limit的时候,该命令显示当前值。这里要注意的是,当你要修改limit的时候,如果不指定-S或者-H,默认是同时设置soft limit和hard limit。也就是之后设置时只能减不能增。所以,建议使用ulimit设置limit参数是加上-S。

getrlimit和setrlimit

注意:

在使用setrlimit,需要检查是否成功来判断新值有没有超过hard limit。如下例Linux系统中在应用程序运行过程中经常会遇到程序突然崩溃,提示:Segmentation fault,这是因为应用程序收到了SIGSEGV信号。这个信号提示当进程发生了无效的存储访问,当接收到这个信号时,缺省动作是:终止w/core。终止w/core的含义是:在进程当前目录生成core文件,并将进程的 内存 映象复制到core文件中,core文件的默认名称就是“core”(这是 Unix类系统的一个由来已久的功能)。
事实上,并不是只有SIGSEGV信号产生coredump,还有下面一些信号也产生coredump:SIGABRT(异常终止)、SIGBUS(硬件故障)、SIGEMT(硬件故障)、SIGFPE(算术异常)、SIGILL(非法硬件指令)、SIGIOT(硬件故障),SIGQUIT,SIGSYS(无效系统调用),SIGTRAP(硬件故障)等。

例子

  1. #include <sys/resource.h>

  2. void init_core_dump()

  3. {

  4. struct rlimit limit;

  5. memset(&limit, 0, sizeof(limit));

  6. limit.rlim_cur = RLIM_INFINITY; //软限制,表示对资源没有限制

  7. limit.rlim_max = RLIM_INFINITY; //硬限制,这个参数表示对资源没有限制,一定要大于等于rlim_cur值

  8. setrlimit(RLIMIT_CORE, &limit);

  9. }

  10. int main(void)

  11. {

  12. init_core_dump();

  13. return 0;

  14. }

linux下getrlimit()与setrlimit()函数说明及使用-CSDN博客

http://www.jsqmd.com/news/771121/

相关文章:

  • RAGFlow开源智能文档问答引擎:从原理到部署的完整实践指南
  • 终极指南:如何用MelonLoader为Unity游戏一键安装和管理Mod
  • MAA明日方舟助手:5分钟彻底告别重复刷图,全自动智能基建管理
  • Calibre中文路径终极解决方案:3步告别拼音乱码,永久保留原文件名
  • 2026国内在线溶解氧仪十大品牌选型地图 - 仪表人叶工
  • 兰州初中择校全百科:优质民办校核心选择维度解析 - 奔跑123
  • 西安制冷设备回收公司排行 资质服务结算能力实测对比 - 奔跑123
  • A8款WiFiBLE+4G+GPS摄像头拍照图传模块 - 产品使用手册
  • Spring全家桶体系化学习笔记(2026突击版)
  • 终极指南:5分钟让通达信拥有专业缠论分析能力
  • 终极指南:Supersonic开源音乐播放器如何重新定义自托管音乐体验
  • 2026年郑州方舟建材铝单板、蜂窝铝单板全国采购指南:深度横评与官方对接通道 - 精选优质企业推荐官
  • git2gpt:将Git仓库转为AI可读文本,提升代码分析与协作效率
  • 2026年遵义交通标志牌与标志杆采购指南:市政工程一站式配套方案对标评测 - 企业名录优选推荐
  • AI视频总结怎么做?多模态AI从音视频到结构化知识的实践
  • MPU驱动高分辨率屏?试试GM8775C:MIPI转双路LVDS实战与BIST测试详解
  • 到底哪家维修电子秤专业?浙江翔衡与杭州友恒行业标杆 - 品牌推荐大师
  • 3分钟掌握Warframe Shawzin自动演奏:MIDI音乐转键盘操作全攻略
  • 3步掌握OpenMTP:让Mac与Android文件传输变得如此简单
  • 开源纯前端ChatGPT客户端Assistant:私有化部署与API成本优化指南
  • 多模型聚合平台在嵌入式开发中的实际用量与成本观测体验
  • 2026年郑州铝单板、氟碳铝单板、蜂窝铝单板全景选购指南:方舟建材与全国5大品牌深度横评 - 精选优质企业推荐官
  • 晟阳自保温复合墙板:引领绿色建筑的五大核心技术优势
  • 2026年4月木龙骨靠谱厂家推荐,吊顶木龙骨/家装阻燃板/无醛欧松板/防潮石膏板/副龙骨/轻钢龙骨,木龙骨厂家哪家实力强 - 品牌推荐师
  • 3步掌握PyMOL分子可视化插件开发:从零到专业扩展
  • 在 Python 项目中配置 Taotoken 作为 OpenAI SDK 的替代后端
  • Redis学习,QuickList vs 跳表 区别
  • macOS窗口操作终极方案:告别繁琐拖拽,一键掌控窗口布局
  • 不用纠结了 ,在上饶卖掉旧黄金,这个办法比典当行爽多了 - 福正美黄金回收
  • 中兴光猫配置解密工具完整指南:3步完成专业级网络故障排查