首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

《UNIX环境高级编程》札记-getrlimit和setrlimit函数

2013-11-03 
《UNIX环境高级编程》笔记--getrlimit和setrlimit函数每个进程都有一组资源限制,其中一些可以使用getrlimit

《UNIX环境高级编程》笔记--getrlimit和setrlimit函数

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


RLIMIT_AS:进程可用存储区的最大总长度(字节)。

RLIMIT_CORE:core文件的最大字节数,若取值为0则阻止创建core文件。

RLIMIT_CPU:CPU时间的最大值(秒),当超过此软限制时,向该进程发送SIGXCPU信号。

RLIMIT_DATA:数据段的最大字节长度。

RLIMIT_FSIZE:可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送SIGXFSZ信号。

RLIMIT_LOCKS:一个进程可持有的文件锁的最大数。

RLIMIT_MEMLOCK:一个进程使用mlock能够锁定在存储器中的最大字节长度。

RLIMIT_NOFILE:每个进程能打开最大文件数。更改此限制将影响到sysconf函数在参数_SC_OPEN_MAX返回的值。

RLIMIT_NPROC:每个实际用户ID可拥有的最大子进程数。更改此限制将影响到sysconf函数在参数_SC_CHILD_MAX返回的值。

RLIMIT_RSS:最大驻内存集的字节长度。(resident set size in bytes,RSS)

RLIMIT_SBSIZE:用户在任一给定时刻可以占用的套接字缓冲区的最大长度。

RLIMIT_STACK:栈的最大字节长度。

RLIMIT_VMEM:这是RLIMT_AS的同义词。

资源限制影响到调用进程并由其子进程继承,这就意味着为了影响一个用户的所有后续进程,需将资源限制的设置构造在shell之

中,确实,bsh,bash,ksh具有内置的ulimit命令,csh具有内置的limit命令。(umask和chdir也是shell内置的)


实践:

#include <stdio.h>#include <sys/resource.h>void pr_limits(char* name, int resource){        struct rlimit limit;        if(getrlimit(resource, &limit) <0){                perror("getrlimit");        }        printf("%-15s",name);        if(limit.rlim_cur == RLIM_INFINITY){                printf("(infinite)     ");        }else{                printf("%-15ld",limit.rlim_cur);        }        if(limit.rlim_max == RLIM_INFINITY){                printf("(infinite)     ");        }else{                printf("%-15ld",limit.rlim_max);        }        printf("\n");}int main(void){        pr_limits("LIMIT_AS",RLIMIT_AS);        pr_limits("RLIMIT_CORE",RLIMIT_CORE);        pr_limits("RLIMIT_CPU",RLIMIT_CPU);        pr_limits("RLIMIT_DATA",RLIMIT_DATA);        pr_limits("RLIMIT_FSIZE",RLIMIT_FSIZE);        pr_limits("RLIMIT_LOCKS",RLIMIT_LOCKS);        pr_limits("RLIMIT_MEMLOCK",RLIMIT_MEMLOCK);        pr_limits("RLIMIT_NOFILE",RLIMIT_NOFILE);        pr_limits("RLIMIT_NPROC",RLIMIT_NPROC);        pr_limits("RLIMIT_RSS",RLIMIT_RSS);        pr_limits("RLIMIT_STACK",RLIMIT_STACK);        return 0;}
运行结果:

LIMIT_AS       (infinite)     (infinite)
RLIMIT_CORE    0              (infinite)
RLIMIT_CPU     (infinite)     (infinite)
RLIMIT_DATA    (infinite)     (infinite)
RLIMIT_FSIZE   (infinite)     (infinite)
RLIMIT_LOCKS   (infinite)     (infinite)
RLIMIT_MEMLOCK 65536          65536
RLIMIT_NOFILE  1024           4096
RLIMIT_NPROC   5875           5875
RLIMIT_RSS     (infinite)     (infinite)
RLIMIT_STACK   8388608        (infinite)

热点排行