【发布时间】:2018-02-16 21:08:43
【问题描述】:
我正在尝试在单个 Bash 脚本中对构建并发管道进行建模。我知道我可以使用其他工具,但在这一点上,我这样做是出于对 Bash 的理解。
并行调度作业很容易,最后等待它们全部完成也很容易。但是我想通过在任务 A.1 和任务 X 之后立即触发任务 A.2 来使其运行得更快。为了让自己更加困难,任务 A.1 和任务 A.2 中的代码是相关的和顺序的,所以如果我也能保持代码顺序就好了。
#!/usr/bin/bash
{
echo "Task X"
} &
DEPENDENCY=$!
{
echo "Task A.1"
wait "${DEPENDENCY}"
echo "Task A.2"
} &
{
echo "Task B.1"
wait "${DEPENDENCY}"
echo "Task B.2"
} &
wait
理想情况下这是我想要的,但它不起作用,因为子进程不能互相等待——这是有道理的——但我希望我能以跨平台的方式完成这项工作。
我实际上有这个工作,但我无法保留 *.1 和 *.2 部分的代码
如果这适用于 OSX 和 Linux,那就太好了。我希望 Bash 专家能够加入并展示一种在 Bash 中表达这一点的简洁方式。
【问题讨论】:
-
这是 Make 的完美工作。
标签: linux bash concurrency parallel-processing pipeline