![有没有一种简单的方法来限制并行执行的子进程的数量?](https://linux22.com/image/50390/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E9%99%90%E5%88%B6%E5%B9%B6%E8%A1%8C%E6%89%A7%E8%A1%8C%E7%9A%84%E5%AD%90%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%95%B0%E9%87%8F%EF%BC%9F.png)
我有一个 bash 脚本,可以并行启动多个 rsync 进程。我想限制同时子进程的数量,但不序列化整个脚本。
这是当前脚本的简化版本:
#!/bin/bash
(
flock -n 200 || exit 0
{
for f in $(ssh $1 ls /var/images/)
do
rsync … &
done
wait
} &> /var/log/my.log
) 200>/var/lock/my.lockfile
我相信xargs
与--max-procs
可能是一个解决方案但我不知道如何将其与我的脚本集成。这样可以吗,或者有更好的方法吗?
答案1
ssh "$1" "find /var/images -type f -print0" |
xargs --null --replace --max-procs=X rsync "${1}:{}" /my/destination
应该做到这一点。