我有一个包含要运行的命令行的文件。该文件包含大约 2,000 行。
我有 8 个内核可用。是否可以解析文件并启动 8 个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望这一直持续到文件末尾。
我有一个包含要运行的命令行的文件。该文件包含大约 2,000 行。
我有 8 个内核可用。是否可以解析文件并启动 8 个进程,然后在其中一个程序完成时从文件中执行另一个进程?我希望这一直持续到文件末尾。
使用GNU 并行。这是一个非常强大的工具,官方软件包存在大约 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 并行。
如果您有八个以上的核心并且只希望使用八个核心进行处理,请添加-j 8
到 args 列表中。
您可以使用xargs读取文件,同时将最大进程数限制为可用内核数。例如:
cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
--max-procs=$cores \
--replace \
--verbose \
/bin/sh -c "{}"
您只需运行带有 & 的命令即可在后台启动新进程。这里有一个例子描述了你的问题的解决方案。