আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা দেখতে এটির মতো দেখাচ্ছে:
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
কমান্ড শেষ না হওয়া অবধি প্রতিটি লাইনের প্রক্রিয়াজাতকরণের পরে পরবর্তী একের দিকে চলে যাওয়া খুব সময়সাপেক্ষ, আমি উদাহরণস্বরূপ 20 লাইনগুলি একবারে প্রক্রিয়া করতে চাই যখন তারা শেষ হয় অন্য 20 টি লাইন প্রক্রিয়াজাত হয়।
আমি wget LINK1 >/dev/null 2>&1 &
ব্যাকগ্রাউন্ডে কমান্ডটি প্রেরণ এবং চালিয়ে যাওয়ার কথা ভেবেছিলাম , তবে এখানে 4000 টি লাইন রয়েছে এর অর্থ আমার পারফরম্যান্স সংক্রান্ত সমস্যা হবে, একই সাথে আমার কতগুলি প্রক্রিয়া শুরু করতে হবে তা সীমাবদ্ধ থাকার কথা উল্লেখ না করে এটি ভাল নয় ধারণা.
একটি সমাধান যা আমি এই মুহূর্তে ভাবছি তা যাচাই করা হয় যে কোনও একটি আদেশ এখনও চলমান আছে কি না, উদাহরণস্বরূপ 20 লাইনের পরে আমি এই লুপটি যুক্ত করতে পারি:
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
অবশ্যই এই ক্ষেত্রে আমি যুক্ত করতে হবে এবং লাইনটির শেষদিকে! তবে আমি অনুভব করছি এটি করার সঠিক উপায় এটি নয়।
সুতরাং আমি কীভাবে প্রকৃতপক্ষে প্রতি 20 টি লাইন একসাথে গ্রুপ করব এবং পরবর্তী 20 লাইনে যাওয়ার আগে তাদের সমাপ্ত হওয়ার জন্য অপেক্ষা করব, এই স্ক্রিপ্টটি গতিশীলভাবে উত্পন্ন হয়েছে যাতে এটি তৈরি হওয়ার সময় আমি এতে যা কিছু গণিত করতে পারি তা করতে পারি, তবে এটি করার দরকার নেই উইজেট ব্যবহার করুন, এটি কেবল একটি উদাহরণ ছিল তাই যে কোনও সমাধান যা উইজেট নির্দিষ্ট তা আমাকে কোনও ভাল করতে পারে না।
wait
এখানে সঠিক উত্তর, তবে আপনারwhile [ $(ps …
লেখাটি আরও ভাল লেখা হবেwhile pkill -0 $KEYWORD…
- প্রোক্টোলগুলি ব্যবহার করে … এটি বৈধ কারণে কোনও নির্দিষ্ট নামের প্রক্রিয়া এখনও চলছে কিনা তা যাচাই করার জন্য legitimate