簡體   English   中英

Shell腳本:Ubuntu Linux下bash腳本中的並行命令

[英]Shell script: Parallelizing commands in bash script under Ubuntu linux

我正在創建一個bash腳本來無損地壓縮jpeg和png文件,因此我在Ubuntu下使用了兩個名為jpegoptimoptipng的軟件包 A將腳本與2或4個核心處理器一起使用。 我想使用我的CPU的全部容量。

問題是optipng默認情況下不支持多線程(它僅使用一個CPU內核),因此我決定啟動2或4個並行進程以更快地壓縮圖像。 我已經將圖像文件排序為4個幾乎相等的數組(基於像素數),現在我需要並行運行這些進程。

我正在嘗試在命令末尾用&字符並行化進程,但不會並行進行。

optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_1[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_2[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_3[@]} &)
optipngout=$(optipng -$pnglevel -dir $outdir ${threaddata_4[@]} &)

我必須捕獲命令的輸出,所以我認為問題出在$()結構上。

看看Gnu parallel 它僅需對現有腳本進行少量修改就可以完成您想做的事情。

我通過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[@]}) &

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM