linux setrlimit 内存,getrlimit和setrlimit 资源限制

对每个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit函数查询和更改

getrlimit和setrlimit:资源限制 (getrlimit and setrlimit: Resource Limits)

这两个系统函数是和resource limit相关的。你用过ulimit命令吗?(反正我没用过)

对于每个资源来说有两个limit:一个是hard limit,一个是soft limit,其中后者永远不能超过前者,并且只有拥有superuser权限的进程可以更改前者。

getrlimit和setrlimit的参数相同:第一个参数是资源的类型,第二个参数是rlimit结构的指针,这个结构里面就只有两个成员:hard limit和soft limit

几个重要的资源类型

RLIMIT_CPU:程序执行的最大CPU时间,单位是秒。超过之后程序中止,中止的信号是SIGXCPU

RLIMIT_DATA:程序执行的最大内存

RLIMIT_NPROC:程序孵出的最大子进程数量

RLIMIT_NOFILE:程序打开的文件的最大数量

每一个进程都有自己的一组资源限制,在(*)inux系统中我们可以通过

#include

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

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

这2个API来取得和设置资源

getrlimit用来取得setrlimit用来设置 这二个参数都需要一个要控制的资源 比如控制CPU、内存、文件描述符个数等等的控制,作为第一个参数传入,第二个参数是一个rlimit的结构体地址(指针),他的结构如下定义:

定义放在头文件/usr/include/bits/resource.h中

struct rlimit

{

/* The current (soft) limit.       */

rlim_t rlim_cur;

/* The hard limit.       */

rlim_t rlim_max;

};

结构体中 rlim_cur是要取得或设置的资源软限制的值,rlim_max是硬限制

这两个值的设置有一个小的约束:

1) 任何进程可以将软限制改为小于或等于硬限制

2) 任何进程都可以将硬限制降低,但普通用户降低了就无法提高,该值必须等于或大于软限制

3) 只有超级用户可以提高硬限制

一个无限的限制由常量RLIM_INFINITY指定(The       value       RLIM_INFINITY       denotes no limit on a resource )

小试牛刀(代码只是演示,并没有作错误处理)

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

struct rlimit r;

if(getrlimit(RLIMIT_NOFILE,&r)<0)

{

fprintf(stderr,"getrlimit error\n");

exit(1);

}

printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);

printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);

/** set limit **/

r.rlim_cur=100;

r.rlim_max=200;

if (setrlimit(RLIMIT_NOFILE,&r)<0)

{

fprintf(stderr,"setrlimit error\n");

exit(1);

}

/** get value of set **/

if(getrlimit(RLIMIT_NOFILE,&r)<0)

{

fprintf(stderr,"getrlimit error\n");

exit(1);

}

printf("RLIMIT_NOFILE cur:%d\n",r.rlim_cur);

printf("RLIMIT_NOFILE max:%d\n",r.rlim_max);

return 0;

}

~

gcc test.c

./a.out

RLIMIT_NOFILE cur:1024

RLIMIT_NOFILE max:1024

RLIMIT_NOFILE cur:100

RLIMIT_NOFILE max:200

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值