답변:
#!/bin/bash
command1 &
command2 &
command3 &
wait
command4
wait
(인수없이) 모든 백그라운드 프로세스가 종료 될 때까지 기다립니다.
의 완전한 설명 wait
에 bash
수동 :
wait [-n] [n ...]
지정된 각 하위 프로세스를 기다렸다가 종료 상태를 리턴하십시오. 각각
n
프로세스 ID 또는 작업 사양 일 수 있습니다. 작업 스펙이 제공되면 해당 작업 파이프 라인의 모든 프로세스가 대기합니다. 경우n
제공되지 않으며, 현재 활성화 된 모든 자식 프로세스는 기다렸다되며, 반환 상태는 0입니다. 경우-n
옵션이 제공되어,wait
어떤 작업 대기 종료 및 종료 상태를 반환합니다. 경우n
지정 존재하지 않는 프로세스 또는 작업이 반환 상태가 그렇지 않은 경우 127 인 경우, 반환 상태는 마지막 프로세스 또는 작업의 종료 상태가 기다렸다입니다.
cmd1 & pids=( $! ); cmd2 & pids+=( $! ); cmd3 & pids+=( $! ); wait "${pids[@]}"
것이 좋습니다.
나는 wait
대답을 좋아 하지만 학문적 운동처럼 이것이 효과가 있다고 생각합니다.
bash -c 'command1 & command2 & command3 &' && command4
내가 틀렸다면 정정 해주세요.
time bash -c "sleep 5 &sleep 5 &sleep 5 &" && echo foo
bash 명령이 5 초가 걸렸다 고 말하지 않으면 원하는 것을 수행하지 않은 것입니다.
PID1=$!
다음 과 같은 것을 사용하여 각 자식의 PID를 저장 한 다음로 모든 자식 을 기다리는 것입니다wait "$PID1" "$PID2" "$PID3"
. 조금 더 복잡하지만 프로세스에 대기하지 않으려는 다른 자식이 있으면 작동합니다.