একটি জিএনইউ সিস্টেমে এবং আপনার কাছে থাকলে pv
আপনি এটি করতে পারেন:
cmd='
that command | to execute &&
as shell code'
yes | pv -qL10 | xargs -n1 -P20 sh -c "$cmd" sh
-P20
সবচেয়ে 20 চালানো হয় $cmd
একই সময়ে।
-L10
হার প্রতি সেকেন্ডে 10 বাইটে সীমাবদ্ধ করে, তাই প্রতি সেকেন্ডে 5 লাইন।
যদি আপনার $cmd
দুটি ধীর গতিতে পরিণত হয় এবং 20 সীমাটি পৌঁছানোর কারণ হয়ে থাকে, তবে xargs
একটি $cmd
উদাহরণ কমপক্ষে ফিরে না আসা পর্যন্ত পড়া বন্ধ করে দেওয়া হবে । pv
পাইপটি পূর্ণ না হওয়া অবধি এখনও পাইপগুলিতে একই হারে লিখিতভাবে চালিয়ে যাবে (যা লিনাক্সে K৪ কেবিবিইনের ডিফল্ট পাইপের আকারের সাথে প্রায় ২ ঘন্টা সময় লাগবে)।
এই মুহুর্তে, pv
লেখা বন্ধ হবে। তারপরেও, xargs
পুনরায় পড়া শুরু করার পরে, pv
চেষ্টা করা হবে এবং যত দ্রুত সম্ভব পাঠানো উচিত সমস্ত লাইনগুলি দ্রুত পাঠানো হবে যাতে সামগ্রিকভাবে প্রতি সেকেন্ডে 5 লাইন বজায় রাখতে পারে।
এর অর্থ হ'ল যতক্ষণ পর্যন্ত 20 প্রসেসের সাথে এটি সম্ভব হিসাবে গড়ে প্রতি সেকেন্ডে 5 রান পূরণ করা সম্ভব, এটি এটি করবে। তবে সীমাটি পৌঁছে গেলে, নতুন প্রসেসগুলি যে হারে প্রসেস শুরু হয় তা পিভির টাইমার দ্বারা চালিত হবে না তবে আগের সেমিডেন্সের দৃষ্টিতে যে হারে ফিরে আসে। উদাহরণস্বরূপ, যদি বর্তমানে 20 টি চলমান থাকে এবং 10 সেকেন্ডের জন্য হয়ে থাকে এবং তাদের মধ্যে 10 জন একই সাথে সমস্ত শেষ করার সিদ্ধান্ত নেয়, তবে 10 টি নতুন একবারে শুরু করা হবে।
উদাহরণ:
$ cmd='date +%T.%N; exec sleep 2'
$ yes | pv -qL10 | xargs -n1 -P20 sh -c "$cmd" sh
09:49:23.347013486
09:49:23.527446830
09:49:23.707591664
09:49:23.888182485
09:49:24.068257018
09:49:24.338570865
09:49:24.518963491
09:49:24.699206647
09:49:24.879722328
09:49:25.149988152
09:49:25.330095169
দুই রানের মধ্যে দেরি সর্বদা ঠিক ২.২ সেকেন্ড না হলেও এমনকি প্রতি সেকেন্ডে এটি 5 বার হবে।
সহ ksh93
(বা zsh
যদি আপনার sleep
কমান্ড ভগ্নাংশ সেকেন্ড সমর্থন করে) এর সাথে:
typeset -F SECONDS=0
n=0; while true; do
your-command &
sleep "$((++n * 0.2 - SECONDS))"
done
এটি your-command
যদিও সমবর্তী সংখ্যার উপর কোনও আবদ্ধ রাখে না ।