unix中如何查询和修改进程的资源限制
一、前言
一个进程在运行时,会用到各种资源,比如cpu的使用时间、内存空间、文件等等。那么,一个进程能够占用多少资源呢?cpu使用的时间有多长?进程空间有多大?能够创建多少个文件?这个就是本文需要讨论的内容。
unix系统提供了两个函数来查询和修改进程的资源限制:getrlimit、setrlimit
本文将围绕这两个函数展开讨论。
二、getrlimit
getrlimit用于查看一个进程的资源限制,其函数原型如下:
头文件:#include <sys/resource.h>
函数原型: int getrlimit(int resource, struct rlimit *rlim);
resource参数指定要查询的资源类型,比如RLIMIT_CPU(CPU时间限制)、RLIMIT_FSIZE(文件大小限制)等。
rlim是指向rlimit结构的指针,该结构用于填充查询到的限制值。 如果调用成功,getrlimit返回0。
返回值: 如果调用失败,返回-1,并且设置errno以指示错误类型。 常见的错误可能包括:
EINVAL: 指定的resource参数无效。
EPERM: 用户没有权限获取指定资源的限制。 ENOMEM: 内存不足,无法完成请求。
rlimit数据结构的定义如下:
struct rlimit {
rlim_t rlim_cur; // 软限制
rlim_t rlim_max; // 硬限制
};
软限制是当前进程可以使用的资源限制,而硬限制是一个上限,进程只能借此提升软限制。
rlim_t是一个无符号整型。
linux中支持查询的资源限制如下:
- RLIMIT_AS 地址空间的最大大小。
- RLIMIT_CORE 生成的核心转储文件的最大大小。
- RLIMIT_CPU 进程可使用的最大 CPU 时间(秒)。
- RLIMIT_DATA 进程可使用的最大数据段大小。
- RLIMIT_FSIZE 进程可创建的最大文件大小。
- RLIMIT_MEMLOCK 可以锁定在内存中的最大字节数。
- RLIMIT_MSGQUEUE POSIX 消息队列的最大字节数。
- RLIMIT_nice 进程的最大“nice”值调整。
- RLIMIT_NOFILE 进程可以打开的最大文件描述符数。
- RLIMIT_NPROC 进程可创建的最大子进程数。
- RLIMIT_RSS 进程可用的最大常驻集大小。
- RLIMIT_SBSIZE 套接字缓冲区的最大大小。
- RLIMIT_STACK 进程的最大栈大小。
参考代码如下:
/**************************************************************************************> File Name: rlimit.c> Author: Conbiao> Create Time: 2024.9.18 Wednesday*************************************************************************************//*************************************************************************************** HEADER*************************************************************************************/
#include <stdio.h>
#include <sys/resource.h>/*************************************************************************************** MACRO*************************************************************************************//*************************************************************************************** FUNCTION DESCRIPTION*************************************************************************************/ /*************************************************************************************** MAIN*************************************************************************************/
int main(int argc, char *argv[])
{int ret = 0;struct rlimit rl;if(!getrlimit(RLIMIT_NICE,&rl)){printf("%s: current nice = %lu, the max nice = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nice failed!\n",__func__);return -1;}if(!getrlimit(RLIMIT_CPU,&rl)){printf("%s: current cpu = %lu, the max cpu = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get cpu failed!\n",__func__);return -1;}if(!getrlimit(RLIMIT_NPROC,&rl)){printf("%s: current nproc = %lu, the max nproc = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nproc failed!\n",__func__);return -1;}return ret;
}
运行结果如下图所示:
![[图片]](https://i-blog.csdnimg.cn/direct/43d6674837794b5cb6b66bed51aa9217.png)
(2-1)
ps:资源限制影响到调用进程并由子进程集成。也就是说如果一个进程修改了其资源限制,那么其子进程也会集成这些修改后的限制。
三、setrlimit
setrlimit用于设置进程的资源限制。其函数原型如下:
头文件:#include <sys/resource.h>
函数原型: int setrlimit(int resource, const
struct rlimit *rlim); resource: 需要设置限制的资源类型。 rlim:指向 struct rlimit 结构体的指针
返回值: 返回0代表成功设置了资源限制,返回-1代表设置失败。
参考代码如下:
**/**************************************************************************************> File Name: rlimit.c> Author: Conbiao> Create Time: 2024.9.18 Wednesday*************************************************************************************/
/*************************************************************************************** HEADER*************************************************************************************/
#include <stdio.h>
#include <sys/resource.h>
/*************************************************************************************** MACRO*************************************************************************************/
/*************************************************************************************** FUNCTION DESCRIPTION*************************************************************************************/
/*************************************************************************************** MAIN*************************************************************************************/
int main(int argc, char *argv[])
{int ret = 0;struct rlimit rl;if(!getrlimit(RLIMIT_NICE,&rl)){printf("%s: current nice = %lu, the max nice = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nice failed!\n",__func__);return -1;}if(!getrlimit(RLIMIT_CPU,&rl)){printf("%s: current cpu = %lu, the max cpu = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get cpu failed!\n",__func__);return -1;}if(!getrlimit(RLIMIT_NPROC,&rl)){printf("%s: current nproc = %lu, the max nproc = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nproc failed!\n",__func__);return -1;}if(!getrlimit(RLIMIT_NOFILE,&rl)){printf("%s: current nofile = %lu, the max nofile = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nofile failed!\n",__func__);return -1;}rl.rlim_cur = 2048;//rl.rlim_max = 1048577;if(!setrlimit(RLIMIT_NOFILE,&rl)){printf("%s: set rlimit success!\n",__func__);if(!getrlimit(RLIMIT_NOFILE,&rl)){printf("%s: new current nofile = %lu, the max nofile = %lu \n",__func__,rl.rlim_cur,rl.rlim_max);}else{printf("%s: get nofile failed!\n",__func__);return -1;}}else{return -1;}return ret;
}**
运行结果如下所示:
![[图片]](https://i-blog.csdnimg.cn/direct/c803117a794043f8be0374b598c43ea9.png)
(3-1)
Ps: 一般只能修改软限制,硬限制需要root权限才能修改硬限制。
相关文章:
unix中如何查询和修改进程的资源限制
一、前言 一个进程在运行时,会用到各种资源,比如cpu的使用时间、内存空间、文件等等。那么,一个进程能够占用多少资源呢?cpu使用的时间有多长?进程空间有多大?能够创建多少个文件?这个就是本文…...
【LeetCode每日一题】——401.二进制手表
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 简单 三【题目编号】 401.二进制手表 四【题目描述】 二进制手表顶部…...
ROM和RAM的区别
ROM(Read-Only Memory,只读存储器)和RAM(Random Access Memory,随机存取存储器)是计算机系统中两种不同类型的存储技术,它们在功能、用途和特性上有显著的区别: 1. 存储数据的持久性…...
tomcat的配置
tomcat8最佳配置 <Executor name"tomcatThreadPool" namePrefix"catalina-exec-"maxThreads"500" minSpareThreads"100" prestartminSpareThreads"true"/><Connector executor"tomcatThreadPool" port&…...
SQL使用IN进行分组统计时如何将不存在的字段显示为0
这两天被扔过来一个脏活儿:做一个试点运行系统的运营指标统计。 活儿之所以称为“脏”,是因为要统计8家单位共12个项目的指标。而每个项目有3个用户类指标,以及分17个功能模块,每个功能模块又分5个维度的指标。也就是单个项目是1…...
MoCo对比损失
MoCo(Momentum Contrast,动量对比学习)是一种自监督学习方法,由Facebook AI Research提出,主要用于无监督学习视觉表示。在MoCo中,对比损失(Contrastive Loss)扮演着至关重要的角色&…...
01_WebRtc_一对一视频通话
文章目录 通话网页的设计客户端实现Web的API 服务端实现 2024-9-20 很久没有写博客啦,回顾总结这段时间的成果, 写下博客放松下(开始偷懒啦)主要内容:实现网页(html)打开摄像头并显示到页面需要…...
【小程序 - 大智慧】深入微信小程序的渲染周期
目录 前言应用生命周期页面的生命周期组件的生命周期渲染顺序页面路由运行机制更新机制同步更新异步更新 前言 跟 Vue、React 框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数。 小程序中,生命周期主要分成了三…...
《深入了解 Linux 操作系统》
在计算机领域中,Linux 作为一种强大而重要的操作系统,有着广泛的应用场景,尤其在服务器端占据着举足轻重的地位。 一、Linux 简介 Linux 是一种操作系统,主要应用于服务器端。不同的厂商或个人会对 Linux 的内核进行封装ÿ…...
批评他人也需要技术
俗话说“人无完人,尺有所短,寸有所长”,每个人都有可能犯错误。我们犯错误,并不能说明我们一无是处;一个人做了一件好事,也不能说他做的每件事都是好的。 营造良好的氛围。一说到批评,我们许多…...
安装SQL Server遇到的问题
出现了一和二的问题,最后还是通过三完全卸载sqlserver安装成功了 一.安装过程中依次报错 1.MOF编译器无法连接WMI服务器。原因可能是语义错误(例如,与现有WMI知识库不兼容)或实际错误(例如WMI服务器启动失败)。 2.PerfLib 2.0计数器removal失败…...
java项目之编程训练系统源码(springboot)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 编程训练系统的主要使用者管…...
MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root‘
MySQL的登陆错误:ERROR 1049 (42000): Unknown database ‘root’ 安装MySQL的时候,到网上查的命令行登陆MySQL的方法都是mysql -u root -p password mysql -r root -p 123456但是奇怪的是这条命令我输进去死活都不对,它都会要求再输入一遍…...
vue使用vue-i18n实现国际化
我使用的是vue2.6版本,具体使用其他版本可以进行修改 一、安装 npm install vue-i18n -D 二、配置 1、文件配置 ①在src下创建 i18n 目录 ②在 i18n 目录下创建 langs 文件夹 和 index.js文件,具体如下 2、index.js代码如下,这里使用了…...
微信小程序如何设置左侧导航栏跟随页面滑动
一、使用 scroll-view 组件实现页面滚动 在页面的 wxml 文件中,将需要滚动的内容包裹在scroll - view组件内,例如: <scroll-view scroll-y"true" style"height: 800rpx;"><!-- 这里放置页面的主要内容 -->…...
个人小结(2.0)
离谱,困扰着几周的问题今天偶然发现了解决方法。 问题如下:就是对应的模块引入爆红,但是单击进入引入的文件没有问题 然后它的提示是: 无法找到模块“../views/screen/index.vue”的声明文件。“c:/Users/10834/Desktop/0716_pro…...
探索自动化的魔法:Python中的pyautogui库
文章目录 探索自动化的魔法:Python中的 pyautogui 库背景:为什么选择pyautogui?pyautogui是什么?如何安装pyautogui?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索自动化的魔法:Python中的 …...
YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
一、本文介绍 本文记录的是利用GsConv优化YOLOv9的颈部网络。深度可分离卷积(DSC)在轻量级模型中被广泛使用,但其在计算过程中会分离输入图像的通道信息,导致特征表示能力明显低于标准卷积(SC),…...
EasyExcel的基本使用——Java导入Excel数据
使用EasyExcel导入Excel数据有两种方式 无论哪种方式我们都需要建立Excel表格和Java对象的绑定 首先我们需要根据Excel表头定义一个对应的类 excel表示例: 对应的类: 使用ExcelProperty将excel列名和字段名绑定,括号里面填列名 package co…...
Apache Iceberg 试用
启动 spark-sql 因为 iceberg 相关的 jars 已经在 ${SPARK_HOME}/jars 目录,所以不用 --jars 或者 --package 参数。 spark-sql --master local[1] \--conf spark.sql.extensionsorg.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \--conf spar…...
深度学习概率分布与核心运算 —— 概率论的工具箱(八)
1. 定位导航 上一篇回答了"为什么需要概率"。本篇开始构建概率论的基本工具箱——这些工具是理解后续所有内容(损失函数、贝叶斯推断、生成模型、信息论)的数学基础。 本篇覆盖六大核心概念:随机变量与概率分布(PMF/PDF)、边缘概率、条件概率、链式法则、独立…...
人脸检测新突破:cv_resnet101_face-detection_cvpr22papermogface对戴口罩人脸识别率达91.3%
人脸检测新突破:cv_resnet101_face-detection_cvpr22papermogface对戴口罩人脸识别率达91.3% 你还在为人脸检测工具在复杂场景下“掉链子”而烦恼吗?比如合影里远处的小脸、侧脸,或者戴着口罩、被遮挡的人脸,传统工具常常识别不出…...
(论文速读)AFSS :防遗忘采样策略
论文题目:Does YOLO Really Need to See Every Training Image in Every Epoch?(YOLO真的需要查看每个epoch的每个训练图像吗?)会议:CVPR2026摘要:YOLO检测器以其快速的推理速度而闻名,但是训练它们仍然非…...
C++ 子数组位运算结果 题型
或运算 898. 子数组按位或操作 - 力扣(LeetCode) 我们直接看题,意思很明显,就是找出所有子数组,然后将子数组各个数相或得到的结果有多少个不同。 这里我们首先想到的就是直接把所有子数组求出来在或起来,…...
为什么99%的视频系统都是假的?——没有空间数据的视频,只是一个会动的PPT
一、开头:你看到的“监控”,其实什么都没看见你有没有这种感觉:城市里到处都是摄像头 监控系统越来越多 画面越来越清晰(甚至4K、8K)但一旦真的发生事情:👉 找不到人 👉 跟不上路径 …...
Python实战:基于余弦相似度的中文短文本相似性计算
1. 为什么需要中文短文本相似性计算? 在日常工作和生活中,我们经常会遇到需要比较两段中文文本相似度的场景。比如在客服系统中自动匹配相似问题,在内容平台上检测重复文章,或者在搜索引擎中推荐相关文档。这些场景都离不开文本相…...
终极指南:3分钟掌握Silk v3音频转换,彻底解决微信QQ语音播放难题
终极指南:3分钟掌握Silk v3音频转换,彻底解决微信QQ语音播放难题 【免费下载链接】silk-v3-decoder [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and convert to other format (like mp3). Batch con…...
Go Routine 调度策略与公平性控制
Go Routine调度策略与公平性控制 在Go语言中,Goroutine作为轻量级线程,是并发编程的核心。其高效的调度机制和公平性控制保证了高并发场景下的性能与稳定性。本文将深入探讨Goroutine的调度策略及其公平性控制机制,帮助开发者理解其底层原理…...
UVM field automation机制详解:从宏定义到标志位设置的完整指南
UVM Field Automation机制深度解析:从宏定义到标志位实战指南 在芯片验证领域,UVM(Universal Verification Methodology)已经成为事实上的行业标准。而field automation机制作为UVM中最基础却又最容易被低估的功能之一,…...
ai赋能抓取技能:在快马平台让大模型为openclaw规划无碰撞抓取轨迹
最近在做一个机械臂抓取项目时,遇到了一个头疼的问题:如何在复杂环境中规划无碰撞的抓取轨迹。传统方法需要手动调试大量参数,效率很低。后来尝试用AI辅助开发,发现效果出奇地好,今天就来分享一下这个探索过程。 构建测…...
