运行多个作业:并行和串行的组合

运行多个作业:并行和串行的组合

我想按以下方式运行任务 a_1、a_2、b_1、b_2、c_1、c_2:a_i、b_j、c_k(其中 i、j、k 为 0 或 1)可以并行运行。但 a_2 应该在 a_1 完成后立即运行(它们使用相同的资源,因此 a_2 应该等待 a_1 释放资源)。与b、c相同。

我怎样才能在 bash 中做到这一点?

答案1

( a_1; a_2 ) &
( b_1; b_2 ) &
( c_1; c_2 ) &
wait

这将运行三个后台作业,然后等待所有作业完成。三个后台作业中的每一个都会依次运行其命令。

对于稍微复杂一点的变化:

for task in a b c; do
    for num in 1 2; do "${task}_$num"; done &
done
wait

这会做同样的事情,但会构造 strings等a_1a_2然后执行将这些字符串生成为命令所产生的任务。显然,只有当您的任务是具有这些名称的实际命令时,这才有效。

答案2

使用 GNU 并行:

parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c

或者:

parallel '{}_0; {}_1; {}_2' ::: a b c

相关内容