我正在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
知道可能出现什么问题吗?