Linux - ulimit (shell ressource control)


ulimit is built-in bash command.

It provides control over the resources available to processes.

Hard and Soft

For each ulimit variable, there are actually two limits:

  • a soft limit
  • and a hard limit.

Hard limits are maintained by the kernel while the soft limits are enforced by the shell.


ulimit [-SHacdefilmnpqrstuvx [limit]]

The -H and -S options specify that the hard or soft limit is set for the given resource. A hard limit cannot be increased once it is set; a soft limit may be increased up to the value of the hard limit. If neither -H nor -S is specified, both the soft and hard limits are set.

The value of limit can be a number in the unit specified for the resource or one of the special values hard, soft, or unlimited, which stand for the current hard limit, the current soft limit, and no limit, respectively.

If limit is omitted, the current value of the soft limit of the resource is printed, unless the -H option is given.

When more than one resource is specified, the limit name and unit are printed before the value. Other options are interpreted as follows:

  • -a All current limits are reported
  • -c The maximum size of core files created
  • -d The maximum size of a processes data segment
  • -e The maximum scheduling priority (“nice”)
  • -f The maximum size of files written by the shell and its children
  • -i The maximum number of pending signals
  • -l The maximum size that may be locked into memory
  • -m The maximum resident set size (has no effect on Linux)
  • -n The maximum number of open file descriptors
  • -p The pipe size in 512-byte blocks (this may not be set)
  • -q The maximum number of bytes in POSIX message queues
  • -r The maximum real-time scheduling priority
  • -s The maximum stack size
  • -t The maximum amount of cpu time in seconds
  • -u The maximum number of processes available to a single user
  • -v The maximum amount of virtual memory available to the shell
  • -x The maximum number of file locks



To see the current limitation of the shell, enter the following command:

ulimit -a # for Soft (default)
ulimit -Sa # for Soft (default)
ulimit -Ha # for Hard 

Output Example for soft:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16000
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2047
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


Normal User

A normal user can adjust:

  • the soft limit freely in the range of 0…<hard limit>.
  • the hard limit too, but can only decrease it.


You must be root to increase the hard limit from its default value with the help of a configuration file such as: limits.conf.

Example for the user obi:

obi                 soft    nofile  1024
obi                 hard    nofile  10240

To see the hard limit values, run “ulimit -H -a”.

Some Linux distributions have PAM modules ( that can adjust the limit values at login time.

Powered by ComboStrap