আমার একটি ডিরেক্টরিতে একগুচ্ছ পিএনজি চিত্র রয়েছে। আমার কাছে পিএনজিআউট নামক একটি অ্যাপ্লিকেশন রয়েছে যা আমি এই চিত্রগুলি সংকুচিত করতে চালিত করি। এই অ্যাপ্লিকেশনটি আমার করা স্ক্রিপ্ট দ্বারা কল করা হয়। সমস্যাটি হ'ল এই স্ক্রিপ্টটি একবারে এটি করে:
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
একবারে কেবল একটি ফাইল প্রক্রিয়া করতে অনেক সময় লাগে takes এই অ্যাপটি চালানোর পরে, আমি দেখতে পাচ্ছি যে সিপিইউ মাত্র 10%। সুতরাং আমি আবিষ্কার করেছি যে আমি এই ফাইলগুলি 4 টি ব্যাচে বিভক্ত করতে পারি, প্রতিটি ব্যাচকে একটি ডিরেক্টরিতে রেখে 4 ফায়ার করতে পারি, চারটি টার্মিনাল উইন্ডো, চারটি প্রক্রিয়া, তাই আমার স্ক্রিপ্টের চারটি উদাহরণ রয়েছে একই সাথে, সেই চিত্রগুলি এবং প্রক্রিয়াটি কাজ সময় লাগে 1/4।
দ্বিতীয় সমস্যাটি হ'ল আমি ইমেজ এবং ব্যাচগুলিকে বিভক্ত করার এবং স্ক্রিপ্টটি চারটি ডিরেক্টরিতে অনুলিপি করা, 4 টি টার্মিনাল উইন্ডো খুলতে, ব্লে ...
কোনও স্ক্রিপ্ট দিয়ে কীভাবে কিছু ভাগ না করে?
আমি দুটি জিনিস বোঝাতে চাইছি: প্রথমত আমি কীভাবে ব্যাশ স্ক্রিপ্ট থেকে কোনও প্রক্রিয়াটিকে পটভূমিতে ফায়ার করব? (কেবলমাত্র শেষের দিকে যোগ করুন?) দ্বিতীয়: চতুর্থ টাস্কগুলি প্রেরণের পরে আমি কীভাবে পটভূমিতে কাজগুলি পাঠানো বন্ধ করব এবং স্ক্রিপ্টটি টাস্কগুলি শেষ না হওয়া পর্যন্ত অপেক্ষা করার জন্য রাখব? আমি বলতে চাইছি, কেবল একটি কাজ শেষ হিসাবে পটভূমিতে একটি নতুন টাস্ক প্রেরণ করা, সর্বদা 4 টি কাজ সমান্তরাল রেখে? যদি আমি এটি না করি তবে লুপটি লক্ষ লক্ষ কাজগুলিকে ব্যাকগ্রাউন্ডে ফেলে দেবে এবং সিপিইউ আটকে যাবে।