限制进程使用的资源
2009-01-11 10:15
176 查看
[b] getrlimit和setrlimit函数
每个进程都有一组资源限制,其中某一些可以用getrlimit和setrlimit函数查询和更改。
#include <sys/resource.h>
#include <unistd.h>
int getrlimit(int resource,struct rlimit *rlptr);
int setrlimit(int resource,const struct rlimit rlptr);
Both return: 0 if OK,nonzero on error两个函数
返回:若成功为0,出错为非0
对这两个函数的每一次调用都指定一个资源以及一个指向下列结构的指针。
struct rlimit{
rlim rlim ur;/* 软限制:当前限制 */
rlim rlim ax;/* 硬限制:rlimcur的最大值 */
};
这两个函数不属于POSIX.1,但SVR4和4.3+BSD提供它们。SVR4在上面的结构中使用基本系统数据类型rlim。其它系统则将这两个成员定义为整型或长整型。
进程的资源限制通常是在系统初启时由0#进程建立的,然后由后续进程继承。在SVR4中,系统默认值可以查看文件/etc/conf/cfd/mtune在4.3+BSD中,系统默认值分散在多个头文件中。
在更改资源限制时,须遵循下列三条规则:
1.任何一个进程都可将一个软限制更改为小于或等于其硬限制。
2.任何一个进程都可降低其硬限制值,但它必须大于或等于其软限制值。这种降低,对普通用户而言是不可逆反的。
3.只有超级用户可以提高硬限制。
一个无限量的限制由常数RLIM NFINITY指定。
这两个函数的resource参数取下列值之一。注意并非所有资源限制都受到SVR4和4.3+BSD的支持。
RLIMIT_CORE(SVR4及4.3+BSD)core文件的最大字节数,若其值为0则阻止创建core文件。
RLIMIT_CPU(SVR4及4.3+BSD)CPU时间的最大量值(秒),当超过此软限止时,向该进程发送SIGXCPU信号。
RLIMIT_DATA(SVR4及4.3+BSD)数据段的最大字节长度。这是图7.3中初始化数据、非初始化数据以及堆的总和。
RLIMIT_FSIZE(SVR4及4.3+BSD)可以创建的一个文件的最大字节长度。当超过此软限制时,则向该进程发送SIGFSZ信号。
RLIMIT_MEMLOCK(4.3+BSD)锁定在存储器地址空间(尚末实现)。
RLIMIT_OFILE(SVR4)每个进程最多打开的文件数。更改此限制将影响到sysconf函数在参数-sc-OPEN-MAX中返回的值(2.5.4节)。见程序2.3。
RLIMIT_NPROC(4.3+BSD)每个实际用户ID所拥有的最大子进程数。更改此限制将影响到sysconf函数在参数 CHILDMAX中返回的值(2.5.4节)。
RLIMIT_FILE(4.3+BSD)与SVR4的RLIMIT OFILE相同。
RLIMIT_RSS(4.3+BSD)最大驻内存集字节长度(RSS)。如果物理存储器供子应求,则系统核将从进程处取回超过RSS的部分。
RLIMIT_STACK(SVR4及4.3+BSD)栈的最大字节长度。见图7.3。
RLIMIT_VMEM(SVR4)可映照地址空间的最大字节长度。这影响到mmap函数(12.9节)。
资源限制影响到调用进程并由其子进程继承。这就意味着为了影响一个用户的所有后续进程,需将资源限制设置构造在shell之中。确实,Bourne
Shell和Kornshell具有内部ulimit命令,CShell具有内部limit命令。(umask和chdir也必须是shell内部的)。
较早的BourmeShell,例如由贝克莱提供的一种,不支持ulimit命令。较新的KornShell的ulimit命令具有-H和-s选择项,以分别检查和修改硬和软的限制,但它们尚末编写入文档。
简单的用例:
[/b]
[b]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<sys/time.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<sys/resource.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<unistd.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
int main()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
struct rlimit limit;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char p = '1';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
limit.rlim_cur = RLIM_INFINITY;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
limit.rlim_max = RLIM_INFINITY;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
if(setrlimit(RLIMIT_CORE, &limit))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
printf("set limit failed ");
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
printf("p = %s ",p);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
[/b]
每个进程都有一组资源限制,其中某一些可以用getrlimit和setrlimit函数查询和更改。
#include <sys/resource.h>
#include <unistd.h>
int getrlimit(int resource,struct rlimit *rlptr);
int setrlimit(int resource,const struct rlimit rlptr);
Both return: 0 if OK,nonzero on error两个函数
返回:若成功为0,出错为非0
对这两个函数的每一次调用都指定一个资源以及一个指向下列结构的指针。
struct rlimit{
rlim rlim ur;/* 软限制:当前限制 */
rlim rlim ax;/* 硬限制:rlimcur的最大值 */
};
这两个函数不属于POSIX.1,但SVR4和4.3+BSD提供它们。SVR4在上面的结构中使用基本系统数据类型rlim。其它系统则将这两个成员定义为整型或长整型。
进程的资源限制通常是在系统初启时由0#进程建立的,然后由后续进程继承。在SVR4中,系统默认值可以查看文件/etc/conf/cfd/mtune在4.3+BSD中,系统默认值分散在多个头文件中。
在更改资源限制时,须遵循下列三条规则:
1.任何一个进程都可将一个软限制更改为小于或等于其硬限制。
2.任何一个进程都可降低其硬限制值,但它必须大于或等于其软限制值。这种降低,对普通用户而言是不可逆反的。
3.只有超级用户可以提高硬限制。
一个无限量的限制由常数RLIM NFINITY指定。
这两个函数的resource参数取下列值之一。注意并非所有资源限制都受到SVR4和4.3+BSD的支持。
RLIMIT_CORE(SVR4及4.3+BSD)core文件的最大字节数,若其值为0则阻止创建core文件。
RLIMIT_CPU(SVR4及4.3+BSD)CPU时间的最大量值(秒),当超过此软限止时,向该进程发送SIGXCPU信号。
RLIMIT_DATA(SVR4及4.3+BSD)数据段的最大字节长度。这是图7.3中初始化数据、非初始化数据以及堆的总和。
RLIMIT_FSIZE(SVR4及4.3+BSD)可以创建的一个文件的最大字节长度。当超过此软限制时,则向该进程发送SIGFSZ信号。
RLIMIT_MEMLOCK(4.3+BSD)锁定在存储器地址空间(尚末实现)。
RLIMIT_OFILE(SVR4)每个进程最多打开的文件数。更改此限制将影响到sysconf函数在参数-sc-OPEN-MAX中返回的值(2.5.4节)。见程序2.3。
RLIMIT_NPROC(4.3+BSD)每个实际用户ID所拥有的最大子进程数。更改此限制将影响到sysconf函数在参数 CHILDMAX中返回的值(2.5.4节)。
RLIMIT_FILE(4.3+BSD)与SVR4的RLIMIT OFILE相同。
RLIMIT_RSS(4.3+BSD)最大驻内存集字节长度(RSS)。如果物理存储器供子应求,则系统核将从进程处取回超过RSS的部分。
RLIMIT_STACK(SVR4及4.3+BSD)栈的最大字节长度。见图7.3。
RLIMIT_VMEM(SVR4)可映照地址空间的最大字节长度。这影响到mmap函数(12.9节)。
资源限制影响到调用进程并由其子进程继承。这就意味着为了影响一个用户的所有后续进程,需将资源限制设置构造在shell之中。确实,Bourne
Shell和Kornshell具有内部ulimit命令,CShell具有内部limit命令。(umask和chdir也必须是shell内部的)。
较早的BourmeShell,例如由贝克莱提供的一种,不支持ulimit命令。较新的KornShell的ulimit命令具有-H和-s选择项,以分别检查和修改硬和软的限制,但它们尚末编写入文档。
简单的用例:
[/b]
[b]
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<sys/time.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<sys/resource.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
#include<unistd.h>
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
int main()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
struct rlimit limit;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
char p = '1';
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
limit.rlim_cur = RLIM_INFINITY;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
limit.rlim_max = RLIM_INFINITY;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
if(setrlimit(RLIMIT_CORE, &limit))
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif)
...{
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
printf("set limit failed ");
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif)
printf("p = %s ",p);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
[/b]
相关文章推荐
- 限制 某进程 使用最大CPU资源
- LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统
- 限制 某进程 使用最大CPU资源 _ cpulimit _ 参考
- Linux查看进程所使用资源限制
- Centos7 - 使用cgroups限制进程资源
- Apache Web服务器资源使用限制配置
- cgroup实践---使用cgroup限制mongodb进程内存
- RH413-在Linux下限制用户使用的进程数
- 《unix高级环境编程》进程环境——进程资源限制
- 【PROFILE】使用Oracle的PROFILE对用户资源限制和密码限制的研究
- rlimit Linux下限制资源的使用(Limiting Resource Usage)
- LFCS 系列第十四讲: Linux 进程资源用量监控和按用户设置进程限制
- 使用pidstat查看进程资源使用情况
- MYSQL - 限制资源的使用
- solaris10使用projadd进行资源限制的添加(seminfo_*)
- Docker 容器使用 cgroups 限制资源使用
- 进程资源限制(rlimit)
- Linux系统的资源使用限制
- 使用 docker 对容器资源进行限制
- 使用 shell 脚本对 Linux 系统和进程资源进行监控