Wenn ich ein Programm schreibe, kann es vorkommen, dass ein außer Kontrolle geratenes Programm die Hälfte meines Arbeitsspeichers beansprucht (im Allgemeinen aufgrund von praktisch unendlichen Schleifen beim Erstellen großer Datenstrukturen) und das System sehr langsam wird, sodass ich das fehlerhafte Programm nicht einmal töten kann. Deshalb möchte ich ulimit verwenden, um mein Programm automatisch zu beenden, wenn mein Programm abnormal viel Speicher belegt:
$ ulimit -a
core file size (blocks, -c) 1000
data seg size (kbytes, -d) 10000
scheduling priority (-e) 0
file size (blocks, -f) 1000
pending signals (-i) 6985
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) 10000
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) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 6985
virtual memory (kbytes, -v) 100000
file locks (-x) unlimited
$ ./run_program
aber warum verwendet mein Programm immer noch mehr RAM als das angegebene Limit (ja, ich starte das Programm in derselben Bash-Shell)?
Habe ich etwas über ulimit falsch verstanden?
/proc/12345/status
anzugeben, bei dem 12345 die Prozess-ID ist (nur die Zeilen, die mit beginnen,Vm
sind ausreichend).