进程限制

一 进程资源

1. 资源列表

UNIX/Linux 操作系统族 对进程资源进行了抽象;下图为部分操作系统版本支持的资源类型
在这里插入图片描述

2 资源配置

以下接口可以用来查询或者配置系统资源限制
兼容标准:POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

       #include <sys/time.h>
       #include <sys/resource.h>
       int getrlimit(int resource, struct rlimit *rlim);
       int setrlimit(int resource, const struct rlimit *rlim);

3 系统实验

#include <iostream>
using namespace std;

/*c接口,只好extern C*/
extern "C"
{
	#include <sys/time.h>
	#include <sys/resource.h>
}

/*这里用到一种字符串创建技巧*/
#define pr_rlimit(name) print_rlimit(#name,name)

//int getrlimit(int resource, struct rlimit *rlim);
//int setrlimit(int resource, const struct rlimit *rlim);
int print_rlimit(char const *str, int resource);

int main(void)
{
	/*虚拟地址空间上限:笔者系统显示,无上限*/
	pr_rlimit(RLIMIT_AS);
	/*Core 文件size上限:无上限*/
	pr_rlimit(RLIMIT_CORE);
	/*CPU时间/秒单位上限:无上限*/
	pr_rlimit(RLIMIT_CPU);
	/*数据段(静态区,堆):无上限*/
	pr_rlimit(RLIMIT_DATA);
	/*进程创建文件可能的最大size:无上限*/
	pr_rlimit(RLIMIT_FSIZE);
	
	/*用途不详?*/
	pr_rlimit(RLIMIT_MEMLOCK);
	/*see mq_open?*/
	pr_rlimit(RLIMIT_MSGQUEUE);
	
	/*进程优先级最高级:0级*/
	pr_rlimit(RLIMIT_NICE);
	/*可以打开的文件最大个数:1024个*/
    pr_rlimit(RLIMIT_NOFILE);
    /*可以创建的最大子进程个数:7758*/
    pr_rlimit(RLIMIT_NPROC);
    
    /*?*/
    pr_rlimit(RLIMIT_RSS);
    /*?*/
    pr_rlimit(RLIMIT_RTPRIO);
    /*?*/
    pr_rlimit(RLIMIT_RTTIME);

	/*pending 信号的最大值:7758*/
    pr_rlimit(RLIMIT_SIGPENDING);
    
    /*进程最大栈容量字节:8388608*/
    pr_rlimit(RLIMIT_STACK);
	cout << "Infinite val is : " << RLIM_INFINITY << endl;

	return 0;
}

int print_rlimit(char const *str, int resource)
{
	int res = 0;
	if(NULL == str)
	{
		res = -1;
		goto End;
	}
	
	struct rlimit limit;
	if(res = getrlimit(resource,&limit))
	goto End;

	cout << str << ": Max = " << limit.rlim_max << " Cur = " << 
	limit.rlim_cur << endl;

	End:
		return res;
}

输出:
RLIMIT_AS: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_CORE: Max = 18446744073709551615 Cur = 0
RLIMIT_CPU: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_DATA: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_FSIZE: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_MEMLOCK: Max = 65536 Cur = 65536
RLIMIT_MSGQUEUE: Max = 819200 Cur = 819200
RLIMIT_NICE: Max = 0 Cur = 0
RLIMIT_NOFILE: Max = 1048576 Cur = 1024
RLIMIT_NPROC: Max = 7758 Cur = 7758
RLIMIT_RSS: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_RTPRIO: Max = 0 Cur = 0
RLIMIT_RTTIME: Max = 18446744073709551615 Cur = 18446744073709551615
RLIMIT_SIGPENDING: Max = 7758 Cur = 7758
RLIMIT_STACK: Max = 18446744073709551615 Cur = 8388608
Infinite val is : 18446744073709551615

二 更改进程资源

int setrlimit(int resource, const struct rlimit *rlim);
           struct rlimit {
               rlim_t rlim_cur;  /* Soft limit */
               rlim_t rlim_max;  /* Hard limit (ceiling for rlim_cur) */
         };

前置条件:

  1. 只有超级用户才能修改进程rlim_max 字段
  2. 进程 owner可以降级rlim_cur或者rlim_max ,但要求 rlim_cur <= rlim_max
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值