ulimit 1 user commands nosh
ulimit change resource limit then chain
`ulimit` -H -S limits next-prog

## Note

Most shells have a built-in `ulimit` command that does not chain and that has additional interactive functionality. See the manual for each individual shell for its built-in command. This command is more commonly used with exec 1 and nosh 1. Whilst it is built in to them, it is an external command as far as shells are concerned.

## Description

`ulimit` is a chain-loading utility that changes its resource limits and then chain loads to next-prog with the execvp 3 function.

next-prog may contain its own command line options, which `ulimit` will ignore.

If the -H command line option is used, `ulimit` will set the hard resource limits. If the -S option is used as well, `ulimit` will set both the hard and the soft resource limits. Otherwise, `ulimit` will set just the soft resource limits.

The behaviours when neither command-line option is specified or both are do not match the behaviours of (some) shells. However, note that even shells do not agree with one another on what to do in those two cases. For script clarity, the recommended use is to explicitly use -H for hard only and -S for soft only in separate invocations of the command, and avoid -H -S combined in a single invocation. This not only prevents misunderstanding by shell script programmers, it also clarifies the order in which limits are being set.

### Limit options

The following limit options are available:

-a KiB

  sets `RLIMIT_AS`, `RLIMIT_DATA`, `RLIMIT_MEMLOCK`, and `RLIMIT_STACK`

-c blocks

  sets `RLIMIT_CORE`

-d KiB

  sets `RLIMIT_DATA`

-e number

  sets `RLIMIT_NICE` (only on some operating systems)

-f blocks

  sets `RLIMIT_FSIZE`

-i n

  sets `RLIMIT_SIGPENDING` (only on some operating systems)

-l KiB

  sets `RLIMIT_MEMLOCK`

-m KiB

  sets `RLIMIT_RSS`

-n n

  sets `RLIMIT_NOFILE`

-p count

  sets `RLIMIT_PIPE` (only on some operating systems)

-q count

  sets `RLIMIT_MSGQUEUE` (only on some operating systems)

-s KiB

  sets `RLIMIT_STACK`

-t seconds

  sets `RLIMIT_CPU`

-u n

  sets `RLIMIT_NPROC`

-v KiB

  sets `RLIMIT_AS`

-x n

  sets `RLIMIT_LOCKS` (only on some operating systems)

See setrlimit 2 for an explanation of the effects of these limits and the privileges that are sometimes required.

To set an "infinite" limit, use the text `unlimited` for the limit value. Similarly, the text `=` or `hard` will use the current value of the hard limit as the value. (This is particularly useful when setting soft limits, as it provides a simple means of setting the soft limit to the hard limit ceiling without knowing its current value.)

Special treatment is given to the -a option because it sets multiple limits at once. An attempt to set any one soft limit greater than the matching hard limit will be silently converted into an attempt to set the soft limit equal to the hard limit.

Some limits are set in units of kilobinarybytes and blocks. For commands with finer granularity, see softlimit 1 and hardlimit 1.

## Author

Jonathan de Boyne Pollard