|
楼主 |
发表于 2012-9-3 22:13:49
|
显示全部楼层
-H表示显示的是hard limit。从结果上可以看出soft limit和hard limit的区别。unlimited表示no limit, 即内核的最大值。
对于resouce limit的读取修改,有两种方法。
使用shell内建命令ulimit
使用getrlimit和setrlimit API
ulimit是改变shell的resouce limit,并达到改变shell启动的进程的resouce limit效果(子进程继承)。
usage:ulimit [-SHacdefilmnpqrstuvx [limit]]
当不指定limit的时候,该命令显示当前值。这里要注意的是,当你要修改limit的时候,如果不指定-S或者-H,默认是同时设置soft limit和hard limit。也就是之后设置时只能减不能增。所以,建议使用ulimit设置limit参数是加上-S。
getrlimit和setrlimit的使用也很简单,manpage里有很清楚的描述。
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
需要注意的是你在setrlimit,需要检查是否成功来判断新值有没有超过hard limit。如下例:
- if (getrlimit(RLIMIT_CORE, &rlim)==0) {
- rlim_new.rlim_cur = rlim_new.rlim_max = RLIM_INFINITY;
- if (setrlimit(RLIMIT_CORE, &rlim_new)!=0) {
- rlim_new.rlim_cur = rlim_new.rlim_max =
- rlim.rlim_max;
- (void) setrlimit(RLIMIT_CORE, &rlim_new);
- }
- }
复制代码
|
|