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 buat. 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 menjalankan 4, dari empat jendela terminal, empat proses, jadi saya memiliki empat contoh skrip saya, pada saat yang sama, memproses gambar-gambar itu dan pekerjaan membutuhkan 1/4 dari waktu.
Masalah kedua adalah saya kehilangan waktu untuk membagi gambar dan kumpulan dan menyalin skrip ke empat direktori, buka 4 jendela terminal, bla bla…
Bagaimana dengan satu naskah, tanpa harus membagi apapun?
Maksud saya dua hal:pertama bagaimana saya dari skrip bash, menjalankan proses ke latar belakang? (tambahkan &sampai akhir?) Kedua:bagaimana cara berhenti mengirim tugas ke latar belakang setelah mengirim tugas keempat dan meletakkan skrip untuk menunggu hingga tugas berakhir? Maksud saya, hanya mengirim tugas baru ke latar belakang saat satu tugas berakhir, selalu menjaga 4 tugas secara paralel? jika saya tidak melakukannya, loop akan menjalankan jutaan tugas ke latar belakang dan CPU akan tersumbat.
Jawaban yang Diterima:
Jika Anda memiliki salinan xargs
yang mendukung eksekusi paralel dengan -P
, Anda cukup melakukannya
cetak '%s
Linux