Bash 如何并行运行命令列表?

Bash 如何并行运行命令列表?,bash,parallel-processing,system,systems-programming,Bash,Parallel Processing,System,Systems Programming,我有一个包含要运行的命令行的文件。该文件包含大约2000行 我有8芯可用。是否可以解析文件并启动8个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望此操作一直持续到文件结束。您只需在后台运行带&的命令即可启动新进程。有一个例子描述了你问题的解决方案 您可以使用xargs读取文件,同时将最大进程数限制为可用内核数。例如: cores=$(fgrep -c processor /proc/cpuinfo) xargs --arg-file=/tmp/foo \ --max-p

我有一个包含要运行的命令行的文件。该文件包含大约2000行


我有8芯可用。是否可以解析文件并启动8个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望此操作一直持续到文件结束。

您只需在后台运行带&的命令即可启动新进程。有一个例子描述了你问题的解决方案

您可以使用xargs读取文件,同时将最大进程数限制为可用内核数。例如:

cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
      --max-procs=$cores  \
      --replace \
      --verbose \
      /bin/sh -c "{}"
使用。这是一个功能极其强大的工具,大约有20个linux发行版有官方软件包。那是什么?下面是一个简单的示例,演示如何并行运行命令列表或文件:

jobs.txt的内容

sleep 1; echo "a"
sleep 3; echo "b"
sleep 2; echo "c"
命令:

time parallel :::: jobs.txt
结果:

a
c
b

real    0m3.332s
user    0m0.170s
sys     0m0.037s

注:

如果希望保持顺序与输入相同,请将
-k
标志传递给GNU parallel

如果您有八个以上的内核,并且只希望使用八个内核进行处理,请将
-j 8
添加到args列表中


这本书读得不错,但如果你还没有读过,我强烈建议你花点时间阅读。

GNU parallel在Ubuntu11.10上不可用,但在Debian sid上可用。还值得注意的是,这个示例不会像moreutils包中的并行实用程序那样工作,它具有一些不同的语义。-j 8不是必需的-它是自动检测的。Ubuntu软件包:为了并行运行文件中的命令,您可以执行
cat/path/to/file.txt | parallel
请参见。