делаем простую fork bomb
$ cat fb.sh
#!/bin/sh
while true; do
"$0" &
done
ставим юзеру лимит в 1024 процесса
$ ulimit -u 1024
проверяем
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 16375
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) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
запускаем
$ ./fb.sh
./fb.sh: fork: Ресурс временно недоступен
./fb.sh: fork: Ресурс временно недоступен
./fb.sh: fork: Ресурс временно недоступен
...
теперь в соседнем терминале смотрим в htop и видим: Tasks: 8897 total, 4036 running(до запуска fb.sh имеем Tasks: 78 total, 1 running)
Почему процессов было создано и выполнялось больше чем был задано в ulimit -u?
О системе:
$ uname -a
Linux robin 2.6.24-gentoo #4 SMP Sun Feb 3 19:05:05 MSK 2008 x86_64 Intel(R) Core(TM)2 Quad CPU @ 2.40GHz GenuineIntel GNU/Linux