shell脚本:在并行化bash脚本的命令下,Ubuntu Linux操作系统
问题描述:
我创建一个bash脚本来无损压缩JPEG和PNG文件,所以我用两个包Ubuntu的下一个名为jpegoptim和使用OptiPNG。 A将使用2或4核处理器的脚本。我想使用我的CPU的全部容量。shell脚本:在并行化bash脚本的命令下,Ubuntu Linux操作系统
的问题是,使用OptiPNG不支持默认多线程(它仅使用一个CPU核),所以决定,我启动2或4个并行处理更快来压缩图像。我已经将图像文件分类到4个几乎相同的数组(基于像素数量),现在我需要运行并行化的进程。
我试图在命令末尾使用&
字符并行化进程,但它不会并行执行作业。我不得不捕捉命令的输出,所以我认为问题是与$()结构。
答
我用taskset
和&
命令解决了我的问题。感谢@jedwards
最终的代码如下所示:
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_1[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_2[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_3[@]}) &
outstr=$(taskset 0xFFFFFFFF optipng -$pnglevel -dir $outdir ${threaddata_4[@]}) &
我不认为bash有并发支持,但我可能是错误的。任何原因你不能使用完整的编程语言? – tjameson 2013-03-22 09:47:26
util ['taskset'](http://linuxcommand.org/man_pages/taskset1.html)是你可能会研究的东西。虽然我必须说,如果我有限地使用它,我还没有意识到很多好处。此外,术语“处理器亲和力”可能会帮助您进行搜索。 – jedwards 2013-03-22 09:49:59
@jedwards它与'&'字符配合得很好。谢谢你的帮助! – 2013-03-22 11:37:50