今天Mayuyu将要讲的是Linux进程资源的限制,在操作系统中资源是有限的,一个进程不可能使用无限大的资源。
所以我们要对进程进行资源限制。
比如:
RLIMIT_NOFILE 一个进程能打开的最大文件数,内核默认是1024
RLIMIT_CPU CPU时间的最大值
RLIMIT_DATA 数据段大小的最大值
RLIMIT_STACK 栈的最大尺寸
RLIMIT_AS 进程总共可用的内存大小的最大值
RLIMIT_FSIZE 创建文件大小的最大值
RLIMIT_CORE core文件的最大尺寸,如果为0说明不能创建core文件
在进程资源限制中,有两个重要的概念,分别是:soft limit和hard limit。
soft limit指内核所能支持的资源上限,soft limit最大能是unlimited。
hard limit在只是作为soft limit的上限,当设置hard limit后,soft limit只能小于hard limit。
rlimt结构体定义为:
struct rlimit
{
rlim_t rlim_cur; //soft limit
rlim_t rlim_max; //hard limit
};
我们可以通过命令:ulimit -a 来查看内存资源限制情况。
当然,我们也可以设置和取得进程的资源限制。
有两种方法:
(1)使用shell内建命令
(2)使用API,即setrlimit和getrlimit函数。函数原型分别是:
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
实例:
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
int main()
{
struct rlimit limit;
limit.rlim_cur = RLIM_INFINITY;
limit.rlim_max = RLIM_INFINITY;
if(setrlimit(RLIMIT_CORE, &limit))
printf("set limit failed\n");
return 0;
}