Linux单进程资源限制 rlimit

rlimit 介绍

在Linux中,对进程的限制有多种,如ulimit、rlimit、cgroup等。ulimit为shell层对进程的限制,rlimit为程序中限制单进程的资源使用,cgroup则非限制单进程资源,而是限制了一组进程的资源使用,Docker就是cgroup的经典使用场景。这篇文章主要介绍了rlimit的相关参数,setrlimit getrlimit的使用方式,一个使用rlimit限制进程的demo。
在Linux环境编程下,我们可以具体的限制一个进程对资源的使用,当进程尝试超过资源使用的限制,它可能会收到一个信号,或是因资源超限而失败的系统调用。每个进程最初的获得的限制来自父进程,但是后来可以更改这个限制。

两个关于资源限制的概念

current limit

为系统规定的上限,也叫做”soft limit”,因为进程通常将被限制在这个范围内。

maxinum limit

为一个进程被允许建立current limit的最大值,也叫做”hard limit”,因为一个进程无法避开它,一个进程低于他自己的maxinum limit,且只有超级用户可能提高它的maxinum limit。

使用getrlimit,setrlimit,getrlimit64,setrlimit64(定义在<sys/resource.h>)进行对rlimit结构的使用。

进程资源限制的种类:

rlimit 使用 Demo

用C写了一个demo,用getopt函数把资源限制项做成参数,编译后执行相关binary时可以起到限制作用,具体细节见代码。
limit.h

limit.c

Makefile

测试程序:

运行shell: