Linux – Using ulimit to limit the amount of memory a script can use

bashlinuxmemoryUbuntuulimit

I have an ubuntu system and I have a script that runs regularly. I need to limit the maximum amount of memory that this script can use. AFAIK ulimit is the command to do this, however I can't get it to work.

For example I have the following script:

#! /bin/bash

ulimit -m 1024

X="x"
seq 100 | while read LINE ; do
    X="$X$X"
done

This should make $X grow in size, and this example is just the kind of thing I want to limit. However the ulimit call doesn't seem to work. I can run the script OK, and it doesn't die, and top shows me that the script gets lots of memory. What am I doing wrong? How can I force this script to never user more than a certain amount of memory?

Best Answer

I was able to get the script to error out with the -v option:

#!/bin/bash

ulimit -v 100000
for i in {1..10000000}
do
    x="x"$x
done

The Bash man page says:

-m            The  maximum resident set size (many systems do not honor
              this limit)