![쉘 스크립트를 실행하고 백그라운드에서 여러 명령을 실행하면 약 30초 지연으로 2개의 명령이 실행됩니다. [폐쇄]](https://linux55.com/image/189693/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B3%A0%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EC%95%BD%2030%EC%B4%88%20%EC%A7%80%EC%97%B0%EC%9C%BC%EB%A1%9C%202%EA%B0%9C%EC%9D%98%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%8B%A4%ED%96%89%EB%90%A9%EB%8B%88%EB%8B%A4.%20%5B%ED%8F%90%EC%87%84%5D.png)
장기 실행 명령을 실행해야 하는 사용 사례가 있으므로 최대한 빨리 완료할 수 있도록 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
$