编程shell脚本时如何使命令同时运行?

时间:2012-09-05 21:27:14

标签: linux shell concurrency build

我需要下载两个项目,即A和B,最后的结果是B项目的构建,但它只能为项目A的安装而构建。

所以我应该完成的任务如下:

  1. 下载A
  2. 下载B
  3. 构建A,然后安装A
  4. 构建B,然后安装B
  5. 1和2可以同时运行, 2和3并且同时运行,

    传统的编程方式是:

    1 && 3
    2 && 4
    

    有更好的方法来编写shell,它可以更快地完成吗?

    ( (1 && 3 )  & 2 )  && 4    // is there possible? or will this be quicker than the former one?
    

    那么让这些任务同时运行的方法是什么?

2 个答案:

答案 0 :(得分:1)

你可以使用传统方式,将每个&& -list放在后台(感谢William向我指出了正确的依赖关系):

1 && 3 &
2 && wait && 4

首先,我们在后台运行列表1 && 3。只有在作业1成功完成后,作业3才会启动。

接下来,在后台开始一个新列表。此列表运行作业2,如果成功,则调用wait,它将等待所有后台作业完成。 (我没有完全看到确切的顺序,但似乎它不会等待它所属的后台作业。这很好,因为你有一个死锁的情况,一个工作正在等待自己完成。更新:第二个列表必须在前台运行,以便wait命令将后台命令视为后台作业。)在作业1,2和3全部完成后,wait成功完成并且作业完成4开始。

答案 1 :(得分:0)

将它们放在后台,然后使用wait:

1&
2&
wait
3&
4&
wait

如果您等待PID或工作规范,那么它将为您提供逻辑的退出状态。