我有一个包含命令行的文件需要运行,该文件大约有2,000行。
我有8个可用核心。能否解析该文件并启动8个进程,然后在其中一个程序完成时执行文件中的另一个程序?我希望这个过程可以一直持续到文件结束。
我有一个包含命令行的文件需要运行,该文件大约有2,000行。
我有8个可用核心。能否解析该文件并启动8个进程,然后在其中一个程序完成时执行文件中的另一个程序?我希望这个过程可以一直持续到文件结束。
使用 GNU parallel 。它是一个非常强大的工具,为大约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
注意事项:
如果您希望保持与输入顺序相同,请向 GNU parallel 传递 -k
标志。
如果您拥有超过八个核心,但只希望使用八个核心进行处理,请在 args 列表中添加 -j 8
。
cat /path/to/file.txt | parallel
。 - Mr Purple你可以使用xargs读取文件,同时将最大进程数限制为可用核心数。例如:
cores=$(fgrep -c processor /proc/cpuinfo)
xargs --arg-file=/tmp/foo \
--max-procs=$cores \
--replace \
--verbose \
/bin/sh -c "{}"