您如何确定 bash 中恰好有 n 个项目是 运行?

How can you make sure that exactly n project is running in bash?

我有一个程序以非常占用磁盘空间的方式处理文件。我想在很多情况下调用这个过程,经验表明,当同时启动的进程不超过 3 个时,性能是最好的(否则它们正在争夺磁盘使用资源,因为资源太多而且每个都很慢其他的)。当少于 n (3) 个进程(由列出的命令启动)同时 运行 时,是否有一种简单的方法从列表中调用命令并开始执行新命令?

您可以使用 xargs。来自 the manpage:

--max-procs=max-procs
-P max-procs
      Run  up  to max-procs processes at a time; the default is 1.  If
      max-procs is 0, xargs will run as many processes as possible  at
      a  time.   Use the -n option with -P; otherwise chances are that
      only one exec will be done.

例如,假设您的命令每行一个:

printf 'sleep %dm\n' 1 2 3 4 5 6 | xargs -L1 -P3 -I {} sh -c {}

然后,在终端中:

$ pgrep sleep -fa
11987 sleep 1m
11988 sleep 2m
11989 sleep 3m
$ # a little while later
$ pgrep sleep -fa  
11988 sleep 2m
11989 sleep 3m
12045 sleep 4m

-L1选项一次使用一行作为参数,-I {}表示{}将被该行替换。实际上 运行 命令,我们将它传递给 sh 作为 -c.

的参数