每个进程都有一组资源限制,其中一些可以使用getrlimit和setrlimit函数进行查询和修改。
- #include
- int getrlimit(int resource, struct rlimit *rptr);
- int setrlimit(int resource, const struct rlimit *rptr);
两个函数返回值:如成功返回0,出错则返回非0值。
进程的资源是在系统初始化时由进程0建立的,然后由每个后续进程继承,每种实现都可以用自己的方法对各种限制做出调整。
对这两个函数的每一次调用都会制定一个资源以及一个指向下列结构的指针。
- struct rlimit{
- rlim_t rlim_cur; //soft limit: current limit
- rlim_t rlim_max; //hard limit: maximum value for rlim_cur
- }
在更改资源限制时,必须遵循下列三条规则:
1.任何进程都可将一个软限制值更改为小于或者等于其硬限制值。
2.任何一个进程都可以降低其硬限制值,但它必须大于等于其软限制值。这种降低对普通用户来说是不可逆的。
3.只有超级用户进程可以提高硬限制值。
这两个函数的resource参数取下列值之一:
RLIMIT_AS:进程可用存储区的最大总长度(字节)。
RLIMIT_CORE:core文件的最大字节数,若取值为0则阻止创建core文件。
RLIMIT_CPU:CPU时间的最大值(秒),当超过此软限制时,向该进程发送SIGXCPU信号。
RLIMIT_DATA:数据段的最大字节长度。
RLIMIT_FSIZE:可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送SIGXFSZ信号。
RLIMIT_LOCKS:一个进程可持有的文件锁的最大数。
RLIMIT_MEMLOCK:一个进程使用mlock能够锁定在存储器中的最大字节长度。
RLIMIT_NOFILE:每个进程能打开最大文件数。更改此限制将影响到sysconf函数在参数_SC_OPEN_MAX返回的值。
RLIMIT_NPROC:每个实际用户ID可拥有的最大子进程数。更改此限制将影响到sysconf函数在参数_SC_CHILD_MAX返回的值。
RLIMIT_RSS:最大驻内存集的字节长度。(resident set size in bytes,RSS)
RLIMIT_SBSIZE:用户在任一给定时刻可以占用的套接字缓冲区的最大长度。
RLIMIT_STACK:栈的最大字节长度。
RLIMIT_VMEM:这是RLIMT_AS的同义词。
资源限制影响到调用进程并由其子进程继承,这就意味着为了影响一个用户的所有后续进程,需将资源限制的设置构造在shell之
中,确实,bsh,bash,ksh具有内置的ulimit命令,csh具有内置的limit命令。(umask和chdir也是shell内置的)
实践:
- #include
- #include
- void pr_limits(char* name, int resource){
- struct rlimit limit;
- if(getrlimit(resource, &limit)
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录