쉘 스크립트를 실행하고 백그라운드에서 여러 명령을 실행하면 약 30초 지연으로 2개의 명령이 실행됩니다. [폐쇄]

쉘 스크립트를 실행하고 백그라운드에서 여러 명령을 실행하면 약 30초 지연으로 2개의 명령이 실행됩니다. [폐쇄]

장기 실행 명령을 실행해야 하는 사용 사례가 있으므로 최대한 빨리 완료할 수 있도록 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
$ 

おすすめ記事