Bash脚本正在等待分叉的子进程完成



我有一个脚本,它遍历文件夹结构中的JPG文件来处理它们。

为了加快速度,我将处理任务分为以下几个部分:

#!/bin/sh
SECONDS=0 #Start the clock!
myloop () {
    local run=$1
    jpeg-transform "$file"
    stripexif "$file"
    ...other commands...
}
find /user/dan/testjpgs -name '*.jpg' -print0 | while read -d $'' file
    do myloop "$run" & #fork myloop
    done    
duration=$SECONDS
echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

问题是,脚本结束时的持续时间计算是在脚本执行后立即进行的。它不等待子进程完成,只返回"已过零秒"。

我试过在do…done循环之后插入一个"wait"命令,但没有任何效果。

我使用GNU并行命令解决了这个问题,效果很好,还可以将子进程扩展到可用CPU核的数量。我确信这本可以在纯粹的狂欢中完成,但对我来说这看起来更优雅。

#!/bin/sh
SECONDS=0 #Start the clock!
myloop () {
    command
    command
    command
}
export -f myloop
find . -name '*.jpg' | parallel myloop {}
duration=$SECONDS
echo "$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

相关内容

  • 没有找到相关文章

最新更新