Linux Shell多进程并发
核心原理
&:将命令放到后台执行,Shell 不等待它结束,立即返回。wait:等待所有后台任务结束。( ... ) &:用子 shell 包装一组命令,然后后台执行。
shell的元字符&提供了在后台运行不需要键盘输入的程序的方法。输入命令后,其后紧跟&字符,该命令就会被送往到linux后台执行,而终端又可以继续输入下一个命令了。
1. 简单并发
sh a.sh &
sh b.sh &
sh c.sh &
这三个命令就会被同时送往linux后台执行,在这个程度上,认为这三个命令并发执行了。
shell脚本里实现并发操作技能点
for循环
&后台运行符
wait等待所有子进程结束
2. 批量 ping 并发
for ip in 192.168.56.{1..254} do ( ping $ip -c 4 &>/dev/null if [ $? -eq 0 ]; then echo $ip is alive fi ) & done wait这会导致254 个进程同时 ping,可能会触发系统限制或网络拥塞。
wait等待所有后台子程序执行完毕
3.分批并发(您贴的最后一个例子)
只让for循环中某条指令多进程执行
for ((i=0; i<$cishu; i++)) do start_num=$(expr $i \* $rsnum + $i) end_num=$(expr $start_num + $rsnum) for j in `seq $start_num $end_num` do create_dir $j & done wait # 等这一批全部完成,再进入下一批 done这是“分批串行 + 组内并发”模式。
更简单的并发数控制(使用xargs或parallel)
# 使用 xargs(系统自带,轻量) seq 1 254 | xargs -I {} -P 10 ping -c 1 192.168.56.{} &>/dev/null && echo "{} is alive" # 使用 GNU parallel(需要安装) parallel -j 10 'ping -c 1 192.168.56.{} &>/dev/null && echo {} is alive' ::: {1..254}性能监控与优化
在并发执行时,可以监控系统资源使用情况:
# 查看CPU使用情况 top -b -n 1 | head -n 12 # 查看内存使用情况 free -m # 查看磁盘I/O iostat -x 1 3根据监控结果动态调整并发进程数量,以获得最佳性能。
参考资料
Linux Shell多进程并发以及并发数控制 - 简书
bash shell实现并发多进程操作_bash 多进程并发_低调小一的博客-CSDN博客
