微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 并行运行bash shell并等待

我在一个目录中有100个文件,并希望通过几个步骤处理每个文件,而step1非常耗时.所以伪代码就像:

for filename in ~/dir/*; do
  run_step1 filename >${filename}.out &
done

for outfile in ~/dir/*.out; do
  run_step2 outfile >${outfile}.result
done

我的问题是如何检查给定输入文件的step1是否完整.我以前在C#中使用threads.join,但不确定bash shell是否具有等价物.

解决方法:

试试这个:

declare -a PROCNUMS
IteraTOR=0
for filename in ~/dir/*; do
    run_step1 filename >${filename}.out &
    PROCNUMS[$IteraTOR]=$!
    let "IteraTOR=IteraTOR+1"
done

IteraTOR=0
for outfile in ~/dir/*.out; do
    wait ${PROCNUMS[$IteraTOR]}
    run_step2 outfile >${outfile}.result
    let "IteraTOR=IteraTOR+1"
done

这将使所创建进程的数组按顺序等待它们,因为它们需要完成,而不是依赖于in和out文件之间存在1对1的关系,并且目录在运行时不会更改.

如果您希望假设每个文件都是独立的,那么现在也可以异步运行第二个循环.

我希望这会有所帮助,但如果您有任何疑问,请发表评论.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐