ฉันมีรูปภาพ 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
การประมวลผลครั้งละหนึ่งไฟล์ใช้เวลานาน หลังจากเรียกใช้แอพนี้ฉันเห็นว่าซีพียูเพียง 10% ดังนั้นฉันจึงค้นพบว่าฉันสามารถแบ่งไฟล์เหล่านี้ออกเป็น 4 แบทช์แต่ละแบทช์ในไดเรกทอรีและไฟ 4 จากสี่หน้าต่างเทอร์มินัลสี่กระบวนการสี่ดังนั้นฉันมีสี่อินสแตนซ์ของสคริปต์ของฉันในเวลาเดียวกัน งานใช้เวลา 1/4 ของเวลา
ปัญหาที่สองคือฉันเสียเวลาในการแบ่งภาพและแบทช์และคัดลอกสคริปต์ไปยังสี่ไดเรกทอรีเปิด windows terminal 4, bla bla ...
ด้วยสคริปต์เดียวโดยไม่ต้องแบ่งอะไร
ฉันหมายถึงสองสิ่ง: อันดับแรกฉันจะเริ่มจากสคริปต์ทุบตีเริ่มกระบวนการเป็นพื้นหลังได้อย่างไร (เพียงเพิ่ม & ไปยังจุดสิ้นสุด) ข้อสอง: ฉันจะหยุดส่งงานไปยังพื้นหลังได้อย่างไรหลังจากส่งงานที่สี่และวางสคริปต์ให้รอจนกว่างานจะสิ้นสุด ฉันหมายถึงเพียงแค่ส่งงานใหม่ไปที่พื้นหลังเมื่องานหนึ่งจบลงโดยทำ 4 งานให้ขนานกันเสมอ ถ้าฉันไม่ทำอย่างนั้นลูปจะยิง zillions ของงานไปที่พื้นหลังและ CPU จะอุดตัน