일부 명령을 병렬로 실행하고 싶습니다. 이 명령이 모두 완료되면 다음 명령을 시작하십시오. 나는 다음이 효과가 있다고 생각합니다
#!/bin/bash
command1 &
command2 &
command3 &&
command4
그러나 그것은 진실이 아니다. command4
완전히 완료된 후 처음 세 개의 명령을 실행 해야 합니다 .
답변1
#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait
(인수 없이) 모든 백그라운드 프로세스가 종료될 때까지 기다립니다.
wait
설명서의 전체 설명 bash
:
wait [-n] [n ...]
지정된 각 하위 프로세스를 기다리고 종료 상태를 반환합니다. 각각은
n
프로세스 ID이거나 작업 사양일 수 있습니다. 작업 사양이 제공되면 작업 파이프라인의 모든 프로세스가 대기됩니다. 지정하지 않으면n
현재 활성화된 모든 하위 프로세스가 대기되고 반환 상태는 0입니다.-n
이 옵션이 제공 되면wait
작업이 종료될 때까지 기다렸다가 종료 상태를 반환합니다.n
존재하지 않는 프로세스나 작업을 지정 하면 반환 상태는 127입니다. 그렇지 않은 경우 반환 상태는 마지막 대기 프로세스 또는 작업의 종료 상태입니다.
답변2
나는 이 답변을 좋아 wait
하지만 학문적 연습으로는 이것이 또한 효과가 있을 것이라고 생각합니다.
bash -c 'command1 & command2 & command3 &' && command4
내가 틀렸다면 정정해주세요.