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
이는 동일한 작업을 수행하지만 문자열 등을 구성한 a_1
다음 a_2
해당 문자열을 명령으로 생성하여 발생하는 작업을 수행합니다. 분명히 이것은 작업이 이러한 이름을 가진 실제 명령인 경우에만 작동합니다.
답변2
GNU 병렬 처리 사용:
parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c
또는:
parallel '{}_0; {}_1; {}_2' ::: a b c