여러 명령 세트를 병렬로 실행하는 방법은 무엇입니까?

여러 명령 세트를 병렬로 실행하는 방법은 무엇입니까?

여러 명령 세트를 병렬로 실행하려고 합니다. 10개의 그룹이 있으며 각 그룹에는 3개의 명령이 있습니다. 각 그룹 내에서는 순차적으로, 10개 그룹 내에서는 병렬로 실행하고 싶습니다. 나는 이와 같은 것을 시도하고 있지만 이것은 작동하지 않는 것 같습니다.

(command11; command12; command13 &)
(command21; command22; command23 &)
(command31; command32; command33 &)
(command41; command42; command43 &)
...

답변1

당신이 원하는대로

나는 다음과 같은 올바른 구문을 거의 발견했습니다.

(command11; command12; command13) &
(command21; command22; command23) &
(command31; command32; command33) &
(command41; command42; command43) &

원하는 대로, 하지만 더 나은

아니면 원한다면그룹 내에서명령이 실패할 경우 무시되는 명령, 구문은 다음과 같습니다.

command11 && command12 && command13 &
command21 && command22 && command23 &
command31 && command32 && command33 &
command41 && command42 && command43 &

&&" " 와 " " 는 완전히 다른 의미 를 가지고 있다는 점에 유의 하십시오 &. " &&"는 이전 명령이 준비된 경우에만 명령이 실행되고 실패 없이 실행되는 경우에만(즉, 종료 코드가 0인 경우) 의미합니다. " &"는 이전 명령이 기본 실행 라인과 병렬로 실행되며 실패 또는 성공이 중요하지 않음을 의미합니다.

xargs도구를 사용하다

그러나 이러한 솔루션에는 단점이 있습니다.더 이상 기다릴 수 없어뒤쪽에모두이러한 명령을 실행합니다. 이를 위한 몇 가지 트릭이 더 있습니다. 특히 귀하의 경우 이를 수행하는 데 필요한 명령은 다음과 같습니다.

for i in 1 2 3 4 5 6 7 8 9 10
do
  echo "command${i}1 && command${i}2 && command${i}3"
done | xargs -P 10 -l 1 bash -c

매우 유용한 도구를 사용합니다 xargs. 물론 무엇이든 파이프로 연결할 수 있습니다. 예를 들어 수천 개의 작업을 10개의 스레드에서 병렬로 처리하려는 경우 작동합니다.

작동 방식은 bash -c모든 입력 라인에 대해 명령을 호출하는 것입니다.평행선그러나 동시에 실행되는 하위 프로세스는 항상 최대 10개입니다(이 작업은 에서 수행됨 -P 10). xargs모든 bash 프로세스가 실행을 마친 후에만 명령이 종료됩니다.

병렬 도구(다른 답변 참조)

GNU는 비슷한 이름의 도구도 작성했습니다 parallel. 내가 알 수 있는 한, 해당 구문은 s 보다 약간 더 명확 xargs하지만 기능이 적고 덜 일반적입니다. 아마도 다른 대답이 그것을 설명할 것입니다.

NodeJs "병렬" 모듈

당신이에 있다면노드 jsnpm install parallel프레임워크에는 주로 자동화된 빌드 작업을 병렬화하는 데 사용되지만 쉘스크립트에서도 쉽게 사용할 수 있는 매우 일반적인 도구( )도 있습니다 .

npm패키지가 Unix 패킷 처리 환경과 잘 통합되지 않기 때문에 일반적인 환경에서는 좋은 생각이 아닙니다 . 구문은 훨씬 간단하지만 기능은 다른 모든 솔루션보다 훨씬 뒤떨어져 있습니다.


특정 문제의 경우 간단한 경우에는 두 번째 솔루션을 선택하고 더 복잡한 경우에는 xargs 기반 솔루션을 선택합니다.

답변2

그리고GNU 병렬이것은 ~이 될 것이다:

parallel 'command{}1; command{}2; command{}3' ::: {1..4}

아니면 당신이 선호한다면명령 대체:

parallel 'command{}1; command{}2; command{}3' ::: $(seq 4)

GNU Parallel에는 여러분이 살펴보고 싶은 약 150개의 작업 제어 옵션이 있지만비디오 튜토리얼.

관련 정보