/usr/bin/ulimit [-f] [blocks]
ulimit [- [HS] [a | cdfnstv]]
ulimit [- [HS] [c | d | f | n | s | t | v]] limit
limit [-h] [resource [limit]]
unlimit [-h] [resource]
ulimit [-HSacdfnstv] [limit]
ulimit [-HSacdfmnpstv] [limit]
ulimit 实用程序可设置或报告文件大小的写入限制,适用于由 shell 及其子进程编写的文件(可以读取任意大小的文件)。只有具有相应特权的进程才可以提高此限制。
Bourne shell 内置函数 ulimit 可输出或设置资源硬限制或软限制。getrlimit(2) 中介绍了这些限制。
如果不存在 limit,则 ulimit 会输出指定的限制。一次可以输出任意数量的限制。–a 选项可输出所有限制。
如果存在 limit,则 ulimit 会将指定的限制设置为 limit。字符串 unlimited 请求删除当前限制(如果有)。所有用户都可以将软限制设置为小于或等于硬限制的任意值。所有用户都可以降低硬限制。只有具有相应特权的用户才可以提高或删除硬限制。请参见 getrlimit(2)。
–H 选项指定硬限制。–S 选项指定软限制。如果未指定任何一个选项,则 ulimit 会同时设置这两个限制,并输出软限制。
以下选项指定要输出或设置其限制的资源。如果未指定选项,则会输出或设置文件大小限制。
最大核心文件大小(以 512 字节块为单位)
最大数据段或堆大小(以千字节为单位)
最大文件大小(以 512 字节块为单位)
最大文件描述符加 1
最大栈段大小(以千字节为单位)
最长 CPU 时间(以秒为单位)
最大虚拟内存大小(以千字节为单位)
C-shell 内置函数 limit 会限制当前进程或其产生的任何进程的消耗,使每个进程的消耗都不超过指定的 resource 上的 limit。字符串 unlimited 请求删除当前限制(如果有)。如果省略了 limit,则会输出当前限制。如果省略了 resource,则会显示所有限制。
使用硬限制而非当前限制。硬限制对当前限制的值施加了一个上限。只有特权用户可以增大硬限制。
resource 为以下值之一:
每个进程的最大 CPU 秒数。
允许的最大单个文件。限制为文件系统的大小和文件系统的功能。请参见 df(1M)。
进程堆的最大大小(以千字节为单位)。
进程的最大堆栈大小。缺省栈大小为 213。
核心转储(文件)的最大大小。它限制为文件系统的大小。
文件描述符的最大数目。可以运行 sysdef(1M) 命令来获取适合您的系统的最大可能限制。sysdef 报告的值为十六进制,但可以使用 bc(1) 命令转换为十进制数字。
虚拟内存的最大大小。
limit 为数字,具有一个可选的比例因子,如下所示:
小时(对于 cputime)。
n 千字节。这是针对除 cputime 之外的所有对象的缺省值。
n 兆字节或分钟(对于 cputime)。
分钟和秒(对于 cputime)。
unlimit 可删除 resource 上的限制。如果未指定 resource,则会删除所有资源限制。有关资源名称的列表,请参见 limit 命令的说明。
删除对应的硬限制。只有特权用户可以执行此操作。
Korn shell 内置函数 ulimit 可设置或显示资源限制。下面列出了可用的资源限制。许多系统都不包含这些限制中的一个或多个。如果指定了 limit,则会设置指定资源的限制。limit 的值可以是一个数字(采用下列随每种资源指定的单位),也可以为值 unlimited。字符串 unlimited 请求删除当前限制(如果有)。–H 和 –S 标志指定是否设置了指定资源的硬限制或软限制。硬限制一旦设置便不能增加。软限制最多可增加至硬限制的值。如果未指定 –H 或 –S 选项,此限制同时适用于两个选项。如果省略了 limit,则会输出当前资源限制。此种情况下,除非指定 –H,否则将输出软限制。如果指定了多种资源,则会在值之前输出限制名称及单位。
列出当前的所有资源限制。
核心转储大小中的 512 字节块的数目。
数据区域大小中的千字节数目。
子进程可写入的文件中的 512 字节块的数目(可以读取任意大小的文件)。
文件描述符数目加 1。
栈区域大小中的千字节数目。
各进程使用的(CPU 时间)秒数。
虚拟内存的千字节数目。
如果未指定任何选项,则采用 –f。
heapsize、datasize 和 stacksize 参数不是系统可调参数。对它们仅有的控制是在 shell 启动文件中设置的硬限制,或系统范围的软限制,针对当前的 Solaris OS 版本,该限制为 213 字节。
ulimit 设置或显示资源限制。在设置了资源限制之后,将适用于当前进程以及创建的每个子进程。如果指定了 limit,则会设置资源限制,否则会在标准输出中显示其当前值。
提高资源的限制通常需要特殊特权。某些系统允许您先降低资源限制,稍后再提高限制。这称为软限制。一旦设置了硬限制,便不能增加资源。
不同的系统允许您指定不同的资源,某些系统会限制资源限制可提高的幅度。
limit 的值取决于为每个资源列出的资源单位。此外,limit 可以是 “unlimited”,指示该资源没有任何限制。
如果未指定 –H 或 –S,则 –S 用于列出资源,而 –S 和 –H 均用于设置资源。
如果未指定任何资源,则缺省值为 –f。
下列选项适用于 ksh 中的 ulimit:
显示所有当前资源限制。
指定套接字缓冲区大小(以字节为单位)。
指定核心文件大小(以块为单位)。
指定数据大小(以千字节为单位)。
指定文件大小(以块为单位)。
显示或设置硬限制。
指定文件锁的数目。
指定锁定的地址空间(以千字节为单位)。
指定地址空间限制(以千字节为单位)。
指定打开的文件数目。
指定管道缓冲区大小(以字节为单位)。
指定驻留集大小(以千字节为单位)。
显示或设置软限制。
指定栈大小(以千字节为单位)。
指定线程数。
指定 CPU 时间(以秒为单位)。
指定进程数。
指定进程大小(以千字节为单位)。
/usr/bin/ulimit 支持以下选项:
设置(如果不存在 blocks 操作数,则报告)文件大小限制(以块为单位)。–f 选项也是缺省值。
/usr/bin/ulimit 支持以下操作数:
用作新文件大小限制的 512 字节块数目。
以下示例将栈大小限制为 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
以下命令将文件描述符的数目限制为 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
以下命令将核心转储文件大小限制为 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 返回以下退出值:
成功完成。
设置更高限制的请求被拒绝,或出现了错误。
有关下列属性的说明,请参见 attributes(5):
|
|
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) 以准确了解任何给定时间的有效限制。