You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash for循环实现并行处理并捕获步骤完成时间

解决后台进程完成后打印结束时间的问题

你的核心问题是:将耗时的process 3放入后台后,需要在它实际完成时打印结束时间,同时不阻塞循环处理下一个文件。原脚本里的echo会在process 3启动后立刻执行,所以无法满足需求。

修正后的脚本

f_list='a b c d'
for f in $f_list
do  
    echo "start process 1 for ${f}"
    # 替换为你的process1代码
    echo "start process 2 for ${f}"
    # 替换为你的process2代码
    echo "start process 3 for ${f} at $(date)"
    
    # 将process3和结束时间打印绑定为一个后台任务
    {
        # 替换为你的process3代码
        code to start process 3
        echo "process 3 done for ${f} at $(date)"
    } &
done

# 可选:等待所有后台process3任务全部完成后再结束脚本
wait
echo "All files processed"

原理说明

  • 用{ ... } &把process3和后续的echo包裹成一个整体后台任务:循环会在启动这个后台块后,立刻继续处理下一个文件,不会等待process3完成。
  • 后台块内部,process3执行完毕后,才会执行echo打印结束时间,保证时间是任务完成的真实时间。
  • 末尾的wait是可选的,如果需要脚本等所有后台process3都做完再退出,就加上;如果不需要,去掉即可。

内容的提问来源于stack exchange,提问作者cookiemonster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:05:33