複数のタスクの実行:並列とシリアルの組み合わせ

複数のタスクの実行:並列とシリアルの組み合わせ

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

その後、3つのバックグラウンドジョブが実行され、すべてが完了するのを待ちます。 3つのバックグラウンドジョブは、それぞれ対応するコマンドを順番に実行します。

やや複雑な変形の場合:

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

これは同じことを行いますが、文字列などを整理し、a_1そのa_2文字列をコマンドで生成することによって発生することを行います。明らかに、これはタスクがこれらの名前を持つ実際のコマンドである場合にのみ機能します。

おすすめ記事