디렉토리에 PNG 이미지가 많이 있습니다. 이 이미지를 압축하기 위해 실행하는 pngout이라는 응용 프로그램이 있습니다. 이 응용 프로그램은 내가 한 스크립트에 의해 호출됩니다. 문제는이 스크립트가 다음과 같이 한 번에 하나씩 수행한다는 것입니다.
FILES=(./*.png)
for f in "${FILES[@]}"
do
echo "Processing $f file..."
# take action on each file. $f store current file name
./pngout -s0 $f R${f/\.\//}
done
한 번에 하나의 파일 만 처리하는 데 많은 시간이 걸립니다. 이 응용 프로그램을 실행 한 후 CPU가 10 %에 불과하다는 것을 알았습니다. 그래서 나는이 파일들을 4 개의 배치로 나누고, 각 배치를 디렉토리에 넣고 4 개의 터미널 창에서 4 개의 프로세스로 4를 발사 할 수 있다는 것을 발견했습니다. 따라서 동시에 스크립트의 4 개의 인스턴스가 있습니다. 직업은 1/4의 시간이 걸립니다.
두 번째 문제는 이미지와 배치를 나누고 스크립트를 4 개의 디렉토리에 복사하고 4 개의 터미널 창을 열고 bla bla ...
아무것도 나누지 않고 하나의 스크립트로 어떻게합니까?
두 가지 의미 : 먼저 bash 스크립트에서 프로세스를 백그라운드로 실행하려면 어떻게해야합니까? 두 번째 : 네 번째 작업을 보낸 후 백그라운드로 작업 보내기를 중지하고 작업이 끝날 때까지 스크립트를 기다리려면 어떻게해야합니까? 하나의 작업이 끝날 때마다 새로운 작업을 백그라운드로 보내서 항상 4 개의 작업을 병렬로 유지한다는 의미입니까? 내가 그렇게하지 않으면 루프가 수십억 개의 작업을 백그라운드로 시작하고 CPU가 막힙니다.