장기 실행 명령을 실행해야 하는 사용 사례가 있으므로 최대한 빨리 완료할 수 있도록 3~6개의 명령을 병렬로 실행해야 합니다.
다음은 내 코드의 일부입니다.
#!/bin/sh
executeCommand(){
//command which will run for almost 2-3 min
}
executeCommand 1 &
P1=$!
executeCommand 2 &
P2=$!
executeCommand 3 &
P3=$!
wait $P1 $P2 $P3
이 블록을 실행하면서 관찰한 것은 P3이 먼저 실행되고 30초 후에 P2와 P3가 동시에 실행된다는 것입니다. 현실적으로 한 번만 시작하면 최대한 빨리 끝낼 수 있습니다.
내 머신 구성은 다음과 같습니다. EC2 인스턴스: p3.2xlarge(8vCPU, 61GB RAM, 1 Nvidia Tesla V100 GPU, 16 GPU 메모리(GB))
누군가 모든 명령을 한 번에 실행하는 것이 가장 좋다고 제안할 수 있습니까?
미리 감사드립니다
답변1
귀하의 코드가 정확합니다.
시작하기 전에 P1이 끝날 때까지 P2와 P3가 "대기"한다고 말하면 틀린 것 같습니다.
다음은 증거입니다(실제 코드에 동일한 디버그 메시지를 추가하여 동일한 것을 실제로 테스트할 수 있는지 확인하기 위한 것입니다).
executeCommand(){
echo "Starting $1"
sleep 4
echo "$1 Complete"
}
executeCommand 1 &
p1=$!
executeCommand 2 &
p2=$!
executeCommand 3 &
p3=$!
wait "$p1" "$p2" "$p3"
$ sh yourScript
Starting 1
Starting 2
Starting 3
1 Complete
2 Complete
3 Complete
$