- 浏览: 140784 次
文章分类
最新评论
每个进程都有一组资源限制,进程的资源限制通常是在系统初始化时由 0 进程建立的,然后由后续进程继承。每种实现都可以用自己的方法对资源限制做出调整。可以使用 getrlimit 和 setrlimit 函数来查询和修改进程的资源限制。
在更改资源限制时,须遵循下列 3 条规则。
(1)任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。
(2)任何一个进程都可降低其硬限制值,但必须不小于其软限制值。这种降低对普通用户而言是不可逆的。
(3)只有超级用户进程可以提高硬限制值。
常量 RLIM_INFINITY 指定了一个无限量的限制。
下图显示了 resource 参数的可选值中哪些是由 Single UNIX Specification 定义以及常用UNIX 系统的支持情况。
其中各个值的说明如下。
* RLIMIT_AS:进程总的可用存储空间的最大长度(字节)。这影响到 sbrk 函数和 mmap 函数。
* RLIMIT_CORE:core 文件的最大字节数,若其值为 0 则阻止创建 core 文件。
* RLIMIT_CPU:CPU 时间的最大量值(秒),当超过此软限制时,向进程发送 SIGXCPU 信号。
* RLIMIT_DATA:数据段的最大字节长度。这是初始化数据、非初始化以及堆的总和。
* RLIMIT_FSIZE:可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送 SIGXFSZ 信号。
* RLIMIT_MEMLOCK:一个进程使用 mlock(2) 能够锁定在存储空间中的最大字节长度。
* RLIMIT_MSQQUEUE:进程为 POSIX 消息队列可分配的最大存储字节数。
* RLIMIT_NICE:为了影响进程的调度优先级,nice 值可设置的最大限制。
* RLIMIT_NOFILE:每个进程能打开的最多文件数。更改此限制将影响到 sysconf 函数在参数 _SC_OPEN_MAX 中返回的值。
* RLIMIT_NPROC:每个实际用户 ID 可拥有的最大子进程数。更改此限制将影响到 sysconf 函数在参数 _SC_CHILD_MAX 中返回的值。
* RLIMIT_NPTS:用户可同时打开的伪终端的最大数量。
* RLIMIT_RSS:最大驻内存集字节长度(resident set size in bytes,RSS)。如果可用的物理存储器非常少,则内核将从进程处取回超过 RSS 的部分。
* RLIMIT_SBSIZE:在任一给定时刻,一个用户可以占用的套接字缓冲区的最大长度(字节)。
* RLIMIT_SIGPENDING:一个进程可排队的信号最大数量。这个限制是 sigqueue 函数实施的。
* RLIMIT_STACK:栈的最大字节长度。
* RLIMIT_SWAP:用户可消耗的交换空间的最大字节数。
* RLIMIT_VMEM:RLIMIT_AS 的同义词。
资源限制影响到调用进程并由其子进程继承。这意味着,为了影响一个用户的所有后续进程,需要将资源限制的设置构造在 shell 中,比如 Bourne shell、GNU Bourne-again shell 和 Kom shell 就具有内置的 ulimit 命令,C shell 具有内置的 limit 命令。
下列程序打印由系统支持的所有资源当前的软限制和硬限制(注意,有些平台定义 rlim_t 为 unsigned long long 而非 unsigned long。有些限制作用于文件大小,因此 rlim_t 类型必须足够大才能表示文件大小限制。为了避免使用错误的格式说明而导致编译器警告,通常会首先把限制复制到 64 位整型,这样只需处理一种格式)。
注意,在 doit 宏中使用了 ISO C 的字符串创建运算符“#”,以便为每个资源名产生字符串值。
Linux 系统上的运行结果如下。
#include <sys/resource.h> int getrlimit(int resource, struct rlimit *rlptr); int setrlimit(int resource, const struct rlimit *rlptr); /* 返回值:若成功,都返回 0;否则,都返回非 0 */ struct rlimit{ rlim_t rlim_cur; // soft limit: current limit rlim_t rlim_max; // hard limit: maximum value for rlim_cur };
在更改资源限制时,须遵循下列 3 条规则。
(1)任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。
(2)任何一个进程都可降低其硬限制值,但必须不小于其软限制值。这种降低对普通用户而言是不可逆的。
(3)只有超级用户进程可以提高硬限制值。
常量 RLIM_INFINITY 指定了一个无限量的限制。
下图显示了 resource 参数的可选值中哪些是由 Single UNIX Specification 定义以及常用UNIX 系统的支持情况。
其中各个值的说明如下。
* RLIMIT_AS:进程总的可用存储空间的最大长度(字节)。这影响到 sbrk 函数和 mmap 函数。
* RLIMIT_CORE:core 文件的最大字节数,若其值为 0 则阻止创建 core 文件。
* RLIMIT_CPU:CPU 时间的最大量值(秒),当超过此软限制时,向进程发送 SIGXCPU 信号。
* RLIMIT_DATA:数据段的最大字节长度。这是初始化数据、非初始化以及堆的总和。
* RLIMIT_FSIZE:可以创建的文件的最大字节长度。当超过此软限制时,则向该进程发送 SIGXFSZ 信号。
* RLIMIT_MEMLOCK:一个进程使用 mlock(2) 能够锁定在存储空间中的最大字节长度。
* RLIMIT_MSQQUEUE:进程为 POSIX 消息队列可分配的最大存储字节数。
* RLIMIT_NICE:为了影响进程的调度优先级,nice 值可设置的最大限制。
* RLIMIT_NOFILE:每个进程能打开的最多文件数。更改此限制将影响到 sysconf 函数在参数 _SC_OPEN_MAX 中返回的值。
* RLIMIT_NPROC:每个实际用户 ID 可拥有的最大子进程数。更改此限制将影响到 sysconf 函数在参数 _SC_CHILD_MAX 中返回的值。
* RLIMIT_NPTS:用户可同时打开的伪终端的最大数量。
* RLIMIT_RSS:最大驻内存集字节长度(resident set size in bytes,RSS)。如果可用的物理存储器非常少,则内核将从进程处取回超过 RSS 的部分。
* RLIMIT_SBSIZE:在任一给定时刻,一个用户可以占用的套接字缓冲区的最大长度(字节)。
* RLIMIT_SIGPENDING:一个进程可排队的信号最大数量。这个限制是 sigqueue 函数实施的。
* RLIMIT_STACK:栈的最大字节长度。
* RLIMIT_SWAP:用户可消耗的交换空间的最大字节数。
* RLIMIT_VMEM:RLIMIT_AS 的同义词。
资源限制影响到调用进程并由其子进程继承。这意味着,为了影响一个用户的所有后续进程,需要将资源限制的设置构造在 shell 中,比如 Bourne shell、GNU Bourne-again shell 和 Kom shell 就具有内置的 ulimit 命令,C shell 具有内置的 limit 命令。
下列程序打印由系统支持的所有资源当前的软限制和硬限制(注意,有些平台定义 rlim_t 为 unsigned long long 而非 unsigned long。有些限制作用于文件大小,因此 rlim_t 类型必须足够大才能表示文件大小限制。为了避免使用错误的格式说明而导致编译器警告,通常会首先把限制复制到 64 位整型,这样只需处理一种格式)。
#include <stdio.h> #include <stdlib.h> #include <sys/resource.h> #define doit(name) pr_limits(#name, name); static void pr_limits(char *, int); int main(void){ #ifdef RLIMIT_AS doit(RLIMIT_AS); #endif doit(RLIMIT_CORE); doit(RLIMIT_CPU); doit(RLIMIT_DATA); doit(RLIMIT_FSIZE); #ifdef RLIMIT_MEMLOCK doit(RLIMIT_MEMLOCK); #endif #ifdef RLIMIT_MSGQUEUE doit(RLIMIT_MSGQUEUE); #endif #ifdef RLIMIT_NICE doit(RLIMIT_NICE); #endif doit(RLIMIT_NOFILE); #ifdef RLIMIT_NPROC doit(RLIMIT_NPROC); #endif #ifdef RLIMIT_NPTS doit(RLIMIT_NPTS); #endif #ifdef RLIMIT_RSS doit(RLIMIT_RSS); #endif #ifdef RLIMIT_SBSIZE doit(RLIMIT_SBSIZE); #endif #ifdef RLIMIT_SIGPENDING doit(RLIMIT_SIGPENDING); #endif doit(RLIMIT_STACK); #ifdef RLIMIT_SWAP doit(RLIMIT_SWAP); #endif #ifdef RLIMIT_VMEM doit(RLIMIT_VMEM); #endif exit(0); } static void pr_limits(char *name, int resource){ struct rlimit limit; unsigned long long lim; if(getrlimit(resource, &limit) < 0){ printf("getrlimit error for %s\n", name); return; } printf("%-14s ", name); if(limit.rlim_cur == RLIM_INFINITY){ printf("(infinite) "); }else{ lim = limit.rlim_cur; printf("%10lld ", lim); } if(limit.rlim_max == RLIM_INFINITY){ printf("(infinite)"); }else{ lim = limit.rlim_max; printf("%10lld", lim); } putchar((int)'\n'); }
注意,在 doit 宏中使用了 ISO C 的字符串创建运算符“#”,以便为每个资源名产生字符串值。
Linux 系统上的运行结果如下。
$ ./resourceLimit.out RLIMIT_AS (infinite) (infinite) RLIMIT_CORE 0 (infinite) RLIMIT_CPU (infinite) (infinite) RLIMIT_DATA (infinite) (infinite) RLIMIT_FSIZE (infinite) (infinite) RLIMIT_MEMLOCK 65536 65536 RLIMIT_MSGQUEUE 819200 819200 RLIMIT_NICE 0 0 RLIMIT_NOFILE 65535 65535 RLIMIT_NPROC 1024 65535 RLIMIT_RSS (infinite) (infinite) RLIMIT_SIGPENDING 3810 3810 RLIMIT_STACK 10485760 (infinite)
发表评论
-
打开伪终端设备
2018-07-09 20:50 1248在伪终端概述一节中已对 PTY进行了初步的介绍。尽管 ... -
伪终端概述
2018-06-02 11:05 1533伪终端就是指,一个应用程序看上去像一个终端,但事实上它 ... -
终端窗口大小和 termcap
2018-05-29 22:39 791多数 UNIX 系统都提供了一种跟踪当前终端窗口大小的 ... -
终端规范模式和非规范模式
2018-05-29 00:25 937终端规范模式很简单:发一个读请求,当一行已经输入后,终 ... -
终端标识
2018-05-23 11:18 566尽管控制终端的名字在多数 UNIX 系统上都是 /de ... -
波特率和行控制函数
2018-05-22 07:53 933虽然大多数终端设 ... -
终端属性和选项标志
2018-05-20 07:40 706tcgetattr 和 tcsetattr ... -
终端特殊输入字符
2018-05-17 06:33 807终端支持下表所示的特殊输入字符。 为了更改 ... -
终端 I/O 综述
2018-05-10 07:56 432终端设备可认为是由内核中的终端驱动程序控制的。每个终端 ... -
POSIX 信号量
2018-05-09 00:03 575在XSI IPC通信之信 ... -
XSI IPC 通信之共享存储
2018-04-25 07:18 943在XSI IPC通信之消息队列和XSI IPC通信之信 ... -
XSI IPC通信之信号量
2018-04-17 23:38 612在XSI IPC通信之消 ... -
XSI IPC通信之消息队列
2018-04-15 10:54 490消息队列是消息的链接表,存储在内核中,由消息队列标识符 ... -
XSI IPC 相似特征介绍
2018-02-08 23:48 479有 3 种称作 XSI IPC ... -
IPC 通信之 FIFO
2018-02-06 22:55 412FIFO 也被称为命名管道,未命名的管道只能在两个相关 ... -
IPC 通信之管道
2018-01-30 22:22 383管道是 UNIX 系统 IPC 的最古老但也是最常用的 ... -
readv/writev 函数及存储映射 I/O
2018-01-19 00:57 878readv 和 writev 函数可用于在一次函数调用 ... -
POSIX 异步 I/O
2018-01-16 21:33 449POSIX 异步 I/O 接口为对不同类型的文件进行异 ... -
fcntl 记录锁
2018-01-06 23:48 584记录锁的功能是:当有进程正在读或修改文件的某个部分时, ... -
守护进程惯例
2018-01-06 23:52 432UNIX 系统中,守护进程遵循下列通用惯例。 ...
相关推荐
WOW64则是一种在64位Windows下运行32位应用程序的模拟层,它可以调整某些系统限制,以便32位应用程序能够更好地利用64位系统的资源。 这个工具的使用可能会涉及到以下步骤: 1. 下载并运行`memory.exe`,这是一个...
进程资源限制 AIX允许管理员设置进程的资源限制,包括最大虚拟内存大小、最大文件大小、打开文件的最大数目等,这有助于防止资源耗尽和提高系统的安全性。 #### 6. 进程监控与调试 AIX提供了多种工具和命令来...
UNIX提供了对进程资源限制的软限制和硬限制,可以调整这些限制以控制进程资源使用。进程有环境变量,这是一组定义进程运行环境的字符串集合。进程可以通过命名来标识自己,并且在执行完毕后提供退出代码。 UNIX进程...
`jobs`命令可以列出当前shell会话中的作业,而`kill`命令用于向进程发送信号以结束进程,`limit`则用于设置进程资源限制。 了解这些基础知识对于理解和管理Linux系统中的进程至关重要,无论是日常使用还是进行系统...
此外,`nice()`和`renice`命令可以改变进程的优先级,`setrlimit()`用于设置进程资源限制。 守护进程(Daemon)在Linux中是一种特殊类型的后台进程,它们不与任何终端关联,通常用于提供系统服务。创建守护进程通常...
而跨进程通信则可以解决单个进程资源限制的问题。 在提供的压缩包文件中,"www.pudn.com.txt"可能包含了关于这个主题的进一步资料,而"创建进程"可能是示例代码或者详细教程。通过阅读这些文件,你可以更深入地学习...
在Linux中,进程的状态管理还包括调度策略、优先级调整、资源限制等方面,比如nice值和renice命令可以改变进程的执行优先级,而ulimit命令可以设置进程资源限制,如最大文件描述符数量等。 总的来说,理解并熟练...
在Linux系统中,rlimit机制是用于控制进程资源限制的关键组件。通过rlimit,系统管理员或用户能够设定进程可以消耗的资源上限,这对于防止资源过度消耗、提高系统稳定性及安全性至关重要。本文将深入探讨rlimit的...
##### 1.7.3 进程资源限制 为了限制进程的资源使用,Linux内核提供了一系列机制,例如通过`struct rlimit`结构体来设置进程的最大资源消耗限制,包括但不限于CPU时间、文件大小、堆栈大小等。 #### 1.8 系统调用...
进程资源限制是系统资源管理的一部分,它规定了进程能够使用资源的最大限度。在Unix系统中,资源限制可以分为软限制和硬限制,软限制是实际可设置的资源上限,而硬限制则是软限制的上限。可以使用getrlimit()和...
- 使用命令`echo-n'Maxprocesses=SOFT_LIMITS:HARD_LIMITS'>/proc/`pidofmysqld`/limits`可以在不重启MySQL的情况下动态调整进程资源限制。 - **知识点6:解决并发连接问题** - 当MySQL服务提供长连接且需要支持...
Linux/Android cgroup架构是操作系统中用于管理进程资源限制的关键机制。cgroup,全称为control groups,它允许管理员或系统设定一组进程的资源使用限制,包括CPU、内存、磁盘I/O、网络带宽等。在Linux内核中,...
七、进程资源限制 通过`ulimit`命令,系统管理员可以设置单个用户或进程的资源限制,如打开文件描述符的数量、最大虚拟内存大小等,以防止资源滥用。 八、进程树 在Linux中,进程形成了一棵树状结构,根节点是init...
然而,在某些情况下,我们需要对进程通信进行限制,以避免资源过度消耗或确保系统的稳定运行。本篇将深入探讨“易语言进程通讯多开限制”这一主题。 首先,让我们理解什么是进程通讯。在操作系统中,进程是程序执行...
- **进程资源限制**:对进程资源使用的限制。 - **守护进程**:后台服务程序的开发。 - **安全的特权程序编写**:编写具有高权限的程序的安全性考虑。 - **能力管理**:授予进程特定的超级用户权限。 - **登录会计**...
1. "ulimit显示open file能进程能打开的文件数默认是1024.txt":ulimit命令用于设置和查看进程资源限制,其中包括最大打开文件数。默认情况下,许多Linux发行版限制一个进程最多可以打开1024个文件。 2. "errno 24 ...
### Unix环境高级编程:进程的环境 #### 7.1 引言 在深入探讨进程控制原语之前,本章将详细介绍进程所...接下来的部分将更深入地探讨与进程相关的其他主题,例如命令行参数、环境变量的使用以及进程资源限制等内容。
进程资源检测工具是一种用于监控和分析计算机系统性能的软件应用,尤其关注CPU使用率、硬盘活动以及SQL数据库的占用情况。这些工具对于系统管理员、开发人员以及任何关心系统健康和性能的人来说都至关重要。下面我们...