Bash 如何并行运行命令列表?
我有一个包含要运行的命令行的文件。该文件包含大约2000行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
我有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
请参见。