我在 Linux(3.2.0-29-generic)上运行一个 bash 脚本,以循环生成大约 200 个后台进程,每个进程中都有 10 个线程。我观察到,一旦计数超过 175,脚本就会自行终止,并且所有生成的进程也会终止。如果 bash 脚本终止,我无法理解为什么子进程应该消失,除非操作系统认为脚本违反了规则并决定终止整个进程链。我没有捕获脚本中任何命令的返回值。
'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) 15882
max locked memory (kbytes, -l) 64
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) 15882
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
该系统具有双核 CPU 和 2GB RAM,其他情况下未加载。
下面给出的是我正在使用的脚本:
#!/bin/bash
local_port=1700
remote_port=1700
for i in `seq 0 200`;
do
sudo tunctl -u uml-net -g uml-net -t tap$i
sudo brctl addif br0 tap$i
sudo ifconfig tap$i up
sudo ./openwrt-uml-vmlinux ubd0=cow$i,openwrt-uml-ext4.img con0=null con=fd:0,fd:1 \
eth0=tapng,,tap$i
eth1=l2tpv3,,10.x.y.z,$local_port,,$remote_port,0xabab9876abab9876,0xabcd1234abcd1234,2 \
cgroup_disable=memory mem=24M umid=cow$i init=/etc/preinit > UML_output$i.txt 2>&1 &
echo "Created UML $i"
let local_port=local_port+1
let remote_port=remote_port+1
sleep 2
done
知道有什么问题吗?