使用最大进程数并行化Bash脚本

前端之家收集整理的这篇文章主要介绍了使用最大进程数并行化Bash脚本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让我说我有一个循环bash:
for foo in `some-command`
do
   do-something $foo
done

do-something是cpu绑定,我有一个很好的闪亮的4核处理器。我想能够立即运行多达4个do-something。

天真的方法似乎是:

for foo in `some-command`
do
   do-something $foo &
done

这将立即运行所有do-somethings,但有一对夫妇的缺点,主要是做某事,也可能有一些重要的I / O,执行一次可能会放慢一点。另一个问题是这个代码块立即返回,所以没有办法做其他工作,当所有的do-somethings完成。

你怎么写这个循环,所以总是有X做某事一次运行?

根据你想做什么xargs也可以帮助(这里:转换文档与pdf2ps):
cpus=$( ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w )

find . -name \*.pdf | xargs --max-args=1 --max-procs=$cpus  pdf2ps

从文档:

--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.

猜你在找的Bash相关文章