Saya memiliki banyak gambar PNG di direktori. Saya memiliki aplikasi bernama pngout yang saya jalankan untuk mengompres gambar-gambar ini. Aplikasi ini disebut dengan script yang saya lakukan. Masalahnya adalah skrip ini melakukan satu per satu, seperti ini:
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
Memproses hanya satu file pada satu waktu, membutuhkan banyak waktu. Setelah menjalankan aplikasi ini, saya melihat bahwa CPU hanya 10%. Jadi saya menemukan bahwa saya dapat membagi file-file ini dalam 4 batch, menempatkan setiap batch dalam direktori dan memecat 4, dari empat jendela terminal, empat proses, jadi saya memiliki empat contoh skrip saya, pada saat yang sama, memproses gambar-gambar dan pekerjaan membutuhkan 1/4 waktu.
Masalah kedua adalah saya kehilangan waktu untuk membagi gambar dan kumpulan dan menyalin naskah ke empat direktori, buka 4 terminal windows, bla bla ...
Bagaimana melakukannya dengan satu skrip, tanpa harus membagi apa pun?
Maksud saya dua hal: pertama bagaimana saya dari skrip bash, menjalankan proses ke latar belakang? (cukup tambahkan & ke akhir?) Kedua: bagaimana saya berhenti mengirim tugas ke latar belakang setelah mengirim tugas keempat dan menempatkan skrip untuk menunggu sampai tugas berakhir? Maksud saya, hanya mengirim tugas baru ke latar belakang sebagai salah satu tugas berakhir, menjaga selalu 4 tugas secara paralel? jika saya tidak melakukan itu, loop akan memuntahkan banyak tugas ke latar belakang dan CPU akan menyumbat.