手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

limit(1)

名称

limit , ulimit , unlimit - 设置或获取可用于当前 shell 及其后代的系统资源的限制

用法概要

/usr/bin/ulimit [-f] [blocks]

sh

ulimit [- [HS] [a | cdfnstv]]
ulimit [- [HS] [c | d | f | n | s | t | v]] limit

csh

limit [-h] [resource [limit]]
unlimit [-h] [resource]

ksh88

ulimit [-HSacdfnstv] [limit]

ksh

ulimit [-HSacdfmnpstv] [limit]

描述

/usr/bin/ulimit

ulimit 实用程序可设置或报告文件大小的写入限制,适用于由 shell 及其子进程编写的文件(可以读取任意大小的文件)。只有具有相应特权的进程才可以提高此限制。

sh

Bourne shell 内置函数 ulimit 可输出或设置资源硬限制或软限制。getrlimit(2) 中介绍了这些限制。

如果不存在 limit,则 ulimit 会输出指定的限制。一次可以输出任意数量的限制。–a 选项可输出所有限制。

如果存在 limit,则 ulimit 会将指定的限制设置为 limit。字符串 unlimited 请求删除当前限制(如果有)。所有用户都可以将软限制设置为小于或等于硬限制的任意值。所有用户都可以降低硬限制。只有具有相应特权的用户才可以提高或删除硬限制。请参见 getrlimit(2)

–H 选项指定硬限制。–S 选项指定软限制。如果未指定任何一个选项,则 ulimit 会同时设置这两个限制,并输出软限制。

以下选项指定要输出或设置其限制的资源。如果未指定选项,则会输出或设置文件大小限制。

–c

最大核心文件大小(以 512 字节块为单位)

–d

最大数据段或堆大小(以千字节为单位)

–f

最大文件大小(以 512 字节块为单位)

–n

最大文件描述符加 1

–s

最大栈段大小(以千字节为单位)

–t

最长 CPU 时间(以秒为单位)

–v

最大虚拟内存大小(以千字节为单位)

csh

C-shell 内置函数 limit 会限制当前进程或其产生的任何进程的消耗,使每个进程的消耗都不超过指定的 resource 上的 limit。字符串 unlimited 请求删除当前限制(如果有)。如果省略了 limit,则会输出当前限制。如果省略了 resource,则会显示所有限制。

–h

使用硬限制而非当前限制。硬限制对当前限制的值施加了一个上限。只有特权用户可以增大硬限制。

resource 为以下值之一:

cputime

每个进程的最大 CPU 秒数。

filesize

允许的最大单个文件。限制为文件系统的大小和文件系统的功能。请参见 df(1M)

datasize

进程堆的最大大小(以千字节为单位)。

stacksize

进程的最大堆栈大小。缺省栈大小为 213

coredumpsize

核心转储(文件)的最大大小。它限制为文件系统的大小。

descriptors

文件描述符的最大数目。可以运行 sysdef(1M) 命令来获取适合您的系统的最大可能限制。sysdef 报告的值为十六进制,但可以使用 bc(1) 命令转换为十进制数字。

memorysize

虚拟内存的最大大小。

limit 为数字,具有一个可选的比例因子,如下所示:

n h

小时(对于 cputime)。

nk

n 千字节。这是针对除 cputime 之外的所有对象的缺省值。

nm

n 兆字节或分钟(对于 cputime)。

mm:ss

分钟和秒(对于 cputime)。

unlimit 可删除 resource 上的限制。如果未指定 resource,则会删除所有资源限制。有关资源名称的列表,请参见 limit 命令的说明。

–h

删除对应的硬限制。只有特权用户可以执行此操作。

ksh88

Korn shell 内置函数 ulimit 可设置或显示资源限制。下面列出了可用的资源限制。许多系统都不包含这些限制中的一个或多个。如果指定了 limit,则会设置指定资源的限制。limit 的值可以是一个数字(采用下列随每种资源指定的单位),也可以为值 unlimited。字符串 unlimited 请求删除当前限制(如果有)。–H–S 标志指定是否设置了指定资源的硬限制或软限制。硬限制一旦设置便不能增加。软限制最多可增加至硬限制的值。如果未指定 –H–S 选项,此限制同时适用于两个选项。如果省略了 limit,则会输出当前资源限制。此种情况下,除非指定 –H,否则将输出软限制。如果指定了多种资源,则会在值之前输出限制名称及单位。

–a

列出当前的所有资源限制。

–c

核心转储大小中的 512 字节块的数目。

–d

数据区域大小中的千字节数目。

–f

子进程可写入的文件中的 512 字节块的数目(可以读取任意大小的文件)。

–n

文件描述符数目加 1。

–s

栈区域大小中的千字节数目。

–t

各进程使用的(CPU 时间)秒数。

–v

虚拟内存的千字节数目。

如果未指定任何选项,则采用 –f

每个 Shell 的内存参数

heapsizedatasizestacksize 参数不是系统可调参数。对它们仅有的控制是在 shell 启动文件中设置的硬限制,或系统范围的软限制,针对当前的 Solaris OS 版本,该限制为 213 字节。

ksh

ulimit 设置或显示资源限制。在设置了资源限制之后,将适用于当前进程以及创建的每个子进程。如果指定了 limit,则会设置资源限制,否则会在标准输出中显示其当前值。

提高资源的限制通常需要特殊特权。某些系统允许您先降低资源限制,稍后再提高限制。这称为软限制。一旦设置了硬限制,便不能增加资源。

不同的系统允许您指定不同的资源,某些系统会限制资源限制可提高的幅度。

limit 的值取决于为每个资源列出的资源单位。此外,limit 可以是 “unlimited”,指示该资源没有任何限制。

如果未指定 –H–S,则 –S 用于列出资源,而 –S–H 均用于设置资源。

如果未指定任何资源,则缺省值为 –f

下列选项适用于 ksh 中的 ulimit

–a

显示所有当前资源限制。

–b
–sbsize

指定套接字缓冲区大小(以字节为单位)。

–c
–core

指定核心文件大小(以块为单位)。

–d
–data

指定数据大小(以千字节为单位)。

–f
–fsize

指定文件大小(以块为单位)。

–H

显示或设置硬限制。

–L
–locks

指定文件锁的数目。

–l
–memlock

指定锁定的地址空间(以千字节为单位)。

–M
–as

指定地址空间限制(以千字节为单位)。

–n
–nofile

指定打开的文件数目。

–p
–pipe

指定管道缓冲区大小(以字节为单位)。

–m
–rss

指定驻留集大小(以千字节为单位)。

–S

显示或设置软限制。

–s
–stack

指定栈大小(以千字节为单位)。

–T
–threads

指定线程数。

–t
–cpu

指定 CPU 时间(以秒为单位)。

–u
–nproc

指定进程数。

–v
–vmem

指定进程大小(以千字节为单位)。

选项

/usr/bin/ulimit 支持以下选项:

–f

设置(如果不存在 blocks 操作数,则报告)文件大小限制(以块为单位)。–f 选项也是缺省值。

操作数

/usr/bin/ulimit 支持以下操作数:

blocks

用作新文件大小限制的 512 字节块数目。

示例

/usr/bin/ulimit

示例 1 限制栈大小

以下示例将栈大小限制为 512 千字节:

example% ulimit -s 512
example% ulimit -a
time(seconds)         unlimited
file(blocks)            100
data(kbytes)            523256
stack(kbytes)           512
coredump(blocks)        200
nofiles(descriptors)    64
memory(kbytes)          unlimited

sh/ksh88

示例 2 限制文件描述符的数目

以下命令将文件描述符的数目限制为 12 个:

example$ ulimit -n 12
example$ ulimit -a
time(seconds)            unlimited
file(blocks)             41943
data(kbytes)             523256
stack(kbytes)            8192
coredump(blocks)         200
nofiles(descriptors)     12
vmemory(kbytes)          unlimited

csh

示例 3 限制核心转储文件大小

以下命令将核心转储文件大小限制为 0 千字节:

example% limit coredumpsize 0
example% limit
cputime                 unlimited
filesize                unlimited
datasize                523256 kbytes
stacksize               8192 kbytes
coredumpsize            0 kbytes
descriptors             64
memorysize              unlimited
示例 4 删除核心文件大小的限制

下列命令删除了核心文件大小的上述限制:

example% unlimit coredumpsize
example% limit
cputime                 unlimited
filesize                unlimited
datasize                523256 kbytes
stacksize               8192 kbytes
coredumpsize            unlimited
descriptors             64
memorysize              unlimited

环境变量

有关影响 ulimit 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

ulimit 返回以下退出值:

0

成功完成。

>0

设置更高限制的请求被拒绝,或出现了错误。

属性

有关下列属性的说明,请参见 attributes(5)

/usr/bin/ulimit、csh、ksh88、sh

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)
标准
请参见 standards(5)

ksh

属性类型
属性值
可用性
system/core-os
接口稳定性
Uncommitted(未确定)

另请参见

bc(1)csh(1)ksh(1)ksh88(1)sh(1)df(1M)su(1M)swap(1M)sysdef(1M)getrlimit(2)attributes(5)environ(5)standards(5)

附注

请注意,将 ulimit 与其他 Solaris 资源限制功能(如 prctl(1))一起使用时,可能会出现意外后果。请参见 resource_controls (5)

使用 resource_controls (5) 中介绍的项目资源控制时,应使用 prctl(1) 以准确了解任何给定时间的有效限制。