进程环境之getrlimit和setrlimit函数
每个进程都有一组资源限制其中一些可以用getrlimit和setrlimit函数查询和更改。#include sys/resource.hintgetrlimit(intresource,structrlimit *rlptr );intsetrlimit(intresource,conststructrlimit *rlptr ); 两个函数返回值若成功则返回0若出错则返回非0值进程的资源限制通常是在系统初始化时由进程0建立的然后由每个后续进程继承。每种实现都可以用自己的方法对各种限制做出调整。对这两个函数的每一次调用都会指定一个资源以及一个指向下列结构的指针。structrlimit { rlim_t rlim_cur;/*soft limit: current limit*/rlim_t rlim_max;/*hard limit: maximum value for rlim_cur*/};在更改资源限制时须遵循下列三条规则1任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。2任何一个进程都可降低其硬限制值但它必须大于或等于其软限制值。这种降低对普通用户而言是不可逆的。3只有超级用户进程可以提高硬限制值。常量RLIM_INFINITY指定了一个无限量的限制。这两个函数的resource参数取下列值之一RLIMIT_AS 进程可用存储区的最大总长度字节。这回影响sbrk函数和mmap函数。RLIMIT_CORE core文件的最大字节数若其值为0则阻止创建core文件。RLIMIT_CPU CPU时间的最大量值秒当超过此软限制时向该进程发送SIGXCPU信号。RLIMIT_DATA 数据段的最大字节长度。这是初始化数据、非初始化数据以及堆的总和。RLIMIT_FSIZE 可以创建的文件的最大字节长度。当超过此软限制时则向该进程发送SIGXFSZ信号。RLIMIT_LOCKS 一个进程可持有的文件锁的最大数此数也包括Linux特有的文件租借数。RLIMIT_MEMLOCK 一个进程使用mlock2能够锁定在存储器中的最大字节长度。RLIMIT_NOFILE 每个进程能打开的最大文件数。更改此限制将影响到sysconf函数在参数_SC_OPEN_MAX中的返回值。RLIMIT_NPROC 每个实际用户ID可拥有的最大子进程数。更改此限制将影响到sysconf函数在参数_SC_CHILD_MAX中返回的值。RLIMIT_RSS 最大驻内存集的字节长度resident set size in bytes RSS。如果物理存储器供不应求则内核将从进程处取回超过RSS的部分。RLIMIT_SBSIZE 用户在任一给定时刻可以占用的套接字缓冲区的最大长度字节。Linux 2.4.22不支持RLIMIT_STACK 栈的最大字节长度。RLIMIT_VMEM 这是RLIMIT_AS的同义词。Linux 2.4.22不支持资源限制影响到调用进程并由其子进程继承。这就意味着为了影响一个用户的所有后续进行需将资源限制的设置构造在shell之中。Bsh、Bash和Ksh具有内置的ulimit命令Csh具有内置的limit命令。程序7-8 打印当前资源限制[rootlocalhost apue]# cat prog7-8.c #includeapue.h#ifdefined(BSD) || defined(MACOS)#includesys/time.h#defineFMT %10lld #else#defineFMT %10ld #endif#includesys/resource.h#definedoit(name) pr_limits(#name, name)staticvoidpr_limits(char*,int);intmain(void) { #ifdef RLIMIT_AS doit(RLIMIT_AS);#endifdoit(RLIMIT_CORE); doit(RLIMIT_CPU); doit(RLIMIT_DATA); doit(RLIMIT_FSIZE); #ifdef RLIMIT_LOCKS doit(RLIMIT_LOCKS);#endif#ifdef RLIMIT_MEMLOCK doit(RLIMIT_MEMLOCK);#endifdoit(RLIMIT_NOFILE); #ifdef RLIMIT_NPROC doit(RLIMIT_NPROC);#endif#ifdef RLIMIT_RSS doit(RLIMIT_RSS);#endif#ifdef RLIMIT_SBSIZE doit(RLIMIT_SBSIZE);#endifdoit(RLIMIT_STACK); #ifdef RLIMIT_VMEM doit(RLIMIT_VMEM#endifexit(0); }staticvoidpr_limits(char*name,intresource) {structrlimit limit;if(getrlimit(resource, limit) 0) err_sys(getrlimit error for %s, name); printf(%-14s, name);if(limit.rlim_cur RLIM_INFINITY) printf((infinite));elseprintf(FMT, limit.rlim_cur);if(limit.rlim_max RLIM_INFINITY) printf((infinite));elseprintf(FMT, limit.rlim_max); putchar((int)\n); }注意在doit宏中使用了也只能在宏中使用ISO C的字符串创建运算符#以便为每个资源名产生字符串值。例如doitRLIMIT_CORE这将由C预处理器扩展为pr_limits“RLIMIT_CORE” RLIMIT_CORE在Linux下运行此程序得到[rootlocalhost apue]# ./prog7-8RLIMIT_AS (infinite) (infinite) RLIMIT_CORE0(infinite) RLIMIT_CPU (infinite) (infinite) RLIMIT_DATA (infinite) (infinite) RLIMIT_FSIZE (infinite) (infinite) RLIMIT_LOCKS (infinite) (infinite) RLIMIT_MEMLOCK3276832768RLIMIT_NOFILE10241024RLIMIT_NPROC81928192RLIMIT_RSS (infinite) (infinite) RLIMIT_STACK10485760(infinite)本篇博文内容摘自《UNIX环境高级编程》第二版仅作个人学习记录所用。关于本书可参考APUE。

相关新闻

Agent长期记忆方案hindsight:基于MCP与Docker的实战指南

Agent长期记忆方案hindsight:基于MCP与Docker的实战指南

1. 为什么“hindsight”值得单独拿出来聊第一次看到“hindsight”这个词,我脑子里蹦出来的不是“事后诸葛亮”这个略带调侃的翻译,而是它背后那套正在悄悄改变 Agent 架构的东西——让 Agent 拥有可回溯、可检索、可复用的长期记忆。过去一年我一直在折腾…

2026/10/4 19:17:20 阅读更多 →
LangChain.js对话记忆实战:内存存储与文件持久化方案

LangChain.js对话记忆实战:内存存储与文件持久化方案

做 AI 应用做得越久,越觉得对话记忆是个绕不开的坎。你写一个问答助手,用户问一句“我叫小明”,AI 答一句“你好小明”;过了几轮用户又问“我叫什么名字”,AI 一脸茫然地回一句“我并不知道你的名字”。这不是模型笨&a…

2026/10/4 19:17:20 阅读更多 →
Gemma模型LoRA微调实战:从环境搭建到部署全流程

Gemma模型LoRA微调实战:从环境搭建到部署全流程

前阵子接到一个需求:让一个 2B 的 Gemma 模型学会按固定格式输出产品摘要,不能自由发挥。我第一反应是直接写prompt硬刚,试了一轮发现不行——模型记不住规则,偶尔会漏字段。于是老老实实走了微调路线,用 Hugging Face…

2026/10/4 19:17:20 阅读更多 →

最新新闻

DeepSeek    LeetCode 150. 逆波兰表达式求值 JavaScript实现

DeepSeek LeetCode 150. 逆波兰表达式求值 JavaScript实现

解题思路 逆波兰表达式(后缀表达式)天然适合用栈来求解: 遍历 tokens遇到数字:压入栈遇到运算符:从栈中弹出两个操作数,先弹出的是右操作数,后弹出的是左操作数,计算后将结果压回栈遍…

2026/10/4 20:00:54 阅读更多 →
低功耗语音芯片长续航横评:四类场景待机电流与唤醒功耗实测

低功耗语音芯片长续航横评:四类场景待机电流与唤醒功耗实测

你们有没有算过,一个100mAh的纽扣电池,能供一颗始终在听唤醒词的低功耗语音芯片跑多久?我拿着这个问题问了几家方案原厂,得到的答案从“至少一年”到“看你怎么定义一年”都有。2026年做产品,低功耗语音芯片早就不是能…

2026/10/4 20:00:54 阅读更多 →
DeepSeek    LeetCode 151. 反转字符串中的单词  Python3实现

DeepSeek LeetCode 151. 反转字符串中的单词 Python3实现

解题思路 Python 的 split() 方法不传参数时,会按任意空白字符分割,并自动忽略前导、尾随空格以及连续多个空格。 因此只需要: 用 s.split() 得到所有单词列表反转列表用单个空格 ’ ’ 连接 代码实现 class Solution:def reverseWords(self,…

2026/10/4 20:00:54 阅读更多 →
C++分数计算器课设全攻略:从类设计到运算符重载与异常处理

C++分数计算器课设全攻略:从类设计到运算符重载与异常处理

作为一名带过好几届课程设计、自己也亲自写过这个题目的老学长,我必须说“分数计算器”真的是C课设里被低估的好题目。它乍看简单,好像就是做个能算几分之几的加减乘除,但真动手做起来,涉及的东西一点都不少:类的封装、…

2026/10/4 20:00:54 阅读更多 →
Firefox浏览器取证利器Hindsight:解析痕迹与恢复历史记录

Firefox浏览器取证利器Hindsight:解析痕迹与恢复历史记录

hindsight,英文原意是“事后之明”。我第一次接触这个开源工具时,觉得名字起得格外贴切——浏览器取证干的活儿,就是把已经发生的上网行为一条条捞回来,像站在事后回看整个事件现场。真要做数字取证或应急响应时,Firef…

2026/10/4 20:00:54 阅读更多 →
11. 利用PY32Studio+HAL库开发ADC单次多通道扫描采样+中断

11. 利用PY32Studio+HAL库开发ADC单次多通道扫描采样+中断

前言在第十章中,我们扫描方式采集3个通道,每个通道要等待其采集完成后,才能读取数据,等待期间一直处于阻塞状态,浪费CPU的时间。本章我们利用ADC的扫描模式中断的方式来采集3个通道,大大降低CPU的负载。一、…

2026/10/4 19:59:53 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →