1. & 符号连接
task1 & task2 & task3 & wait
并行运行三个任务并等待所有任务完成, 建议使用绝对路径
2. 带后台作业的循环
for i in {1..5}; do
some_command "$i" || echo "Job $i failed" &
done
wait
3. 手动限制并行作业数
max=3
for i in {1..10}; do
some_task "$i" &
while (( $(jobs -rp | wc -l) >= max )); do
sleep 0.5
done
done
wait
每次处理3个作业,等待后继续手动节流
4. 使用 xargs -P 实现并行执行
xargs -n 1 -P 5 curl -O < urls.txt
使用5个并行curl进程从 urls.txt 下载文件
5. 并行文件处理
find . -maxdepth 1 -name "*.log" -print0 | xargs -0 -n 1 -P 4 gzip
使用4个并行进程压缩.log文件
6. 并行SSH连接多台主机
xargs -n 1 -P 10 -I{} ssh -o ConnectTimeout=5 user@{} "uptime" < servers.txt
并行获取多台服务器的uptime(最多10台同时),-o ConnectTimeout=5 防止连接挂起
7. 并行测试执行
find tests/ -name "*.sh" -print0 | xargs -0 -n 1 -P 4 bash
并行运行基于shell的测试脚本,非常适合CI流水线
8. 后台函数执行
worker() { echo "Task $1"; sleep 2; echo "Done $1"; }
for i in {1..4}; do worker "$i" & done
wait
以模块化方式并行运行逻辑,并行运行 worker 函数4次
9. 并行运行 worker 函数4次
xargs -n 1 -P 5 -I{} rsync -az /data/ user@{}:/backup/ < hosts.txt
同时将 /data/ 同步到多台主机
10. 使用GNU parallel
parallel -j 6 "echo Processing {}; sleep 2" < list.txt
每次运行6个作业
parallel 处理引用、批处理等
需要先安装(sudo apt install parallel)
11. 使用GNU parallel并行curl
parallel -j 8 "curl --retry 3 -O {}" < urls.txt
使用最多8个并发curl进程下载文件(包含重试)
12. 并行端口扫描
for ip in $(seq 1 10); do
(nc -zv -w2 192.168.1.$ip 22 && echo "SSH open on $ip") &
done
wait
同时检查10台主机的SSH端口22
13. 使用作业队列(命名管道)节流作业
mkfifo pipe; exec 3<>pipe
for i in {1..4}; doecho >&3; done
for job in {1..10}; do
read -u 3
{
echo"Starting job $job"
sleep 2
echo"Finished job $job"
echo >&3
} &
done
wait
exec 3>&-
使用命名管道(类似信号量)的高级节流模式
设置 {1..N} 为所需的并发级别
14. 监控并行后台作业
for i in {1..5}; do
(echo "Running $i"; sleep $((RANDOM % 5 + 1)); echo "Done $i") &
done
while jobs | grep -q .; do
echo "Waiting for jobs to complete..."
sleep 1
done
循环监控作业而非仅依赖wait
比 wait 更详细,适合实时监控
15. 使用Bash数组跟踪作业
pids=()
for file in *.log; do
gzip "$file" &
pids+=($!)
done
for pid in "${pids[@]}"; do
wait "$pid" || echo "Job $pid failed"
done
使用数组跟踪作业PID以便后续处理或选择性等待
注意事项:
CPU/内存限制:不要使系统过载,合理使用节流
竞态条件:多个进程写入同一文件时要小心
调试:后台作业使错误跟踪更困难
错误处理:使用 wait $PID || echo "Job failed" 模式跟踪失败
专业提示:并行运行任务时,确保每个任务都是幂等的,即可以多次运行而不会产生意外副作用。
bash命令并行处理和多线程运行——筑梦之路
于 2025-07-30 14:48:07 首次发布