有没有一种简单的方法来限制并行执行的子进程的数量?

有没有一种简单的方法来限制并行执行的子进程的数量?

我有一个 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

应该做到这一点。

相关内容