所以我应该完成的任务如下:
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?
那么让这些任务同时运行的方法是什么?
答案 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或工作规范,那么它将为您提供逻辑的退出状态。