আমি জানি আমি কাজ করে বাশে সত্য হয়ে ওঠার শর্তের জন্য অপেক্ষা করতে পারি:
while true; do
test_condition && break
sleep 1
done
তবে এটি প্রতিটি পুনরাবৃত্তিতে (ঘুম) 1 টি উপ-প্রক্রিয়া তৈরি করে। আমি এগুলি করে এড়াতে পারতাম:
while true; do
test_condition && break
done
তবে এতে প্রচুর সিপিইউ (ব্যস্ত ওয়েটিং) ব্যবহার করা হয়। উপ-প্রক্রিয়াগুলি এবং ব্যস্ত অপেক্ষার এড়াতে আমি সমাধানটি নীচু করে তুলেছি, তবে আমি এটি কুরুচিপূর্ণ দেখতে পেয়েছি:
my_tmp_dir=$(mktemp -d --tmpdir=/tmp) # Create a unique tmp dir for the fifo.
mkfifo $my_tmp_dir/fifo # Create an empty fifo for sleep by read.
exec 3<> $my_tmp_dir/fifo # Open the fifo for reading and writing.
while true; do
test_condition && break
read -t 1 -u 3 var # Same as sleep 1, but without sub-process.
done
exec 3<&- # Closing the fifo.
rm $my_tmp_dir/fifo; rmdir $my_tmp_dir # Cleanup, could be done in a trap.
দ্রষ্টব্য: সাধারণ ক্ষেত্রে, আমি কেবল read -t 1 var
ফিফো ছাড়া ব্যবহার করতে পারি না , কারণ এটি স্টিডিন গ্রাস করবে, এবং স্টিডিন টার্মিনাল বা পাইপ না হলে কাজ করবে না।
আমি কি উপ-প্রক্রিয়াগুলি এবং আরও মার্জিত উপায়ে অপেক্ষা করতে ব্যস্ত থাকতে পারি?
true
, প্রশ্ন আপডেট হয়েছে।
read -t 1 var
।
sleep
প্রথম উদাহরণের মতো দৃ strongly়তার সাথে পরামর্শ দেওয়ার পরামর্শ দেব । দ্বিতীয়টি, এটি কাজ করতে পারে, তবে ভবিষ্যতে কারও পক্ষে সামঞ্জস্য করা সহজ হবে না। সরল কোডেও নিরাপদ থাকার বড় সম্ভাবনা রয়েছে ।
true
এটি একটি অন্তর্নির্মিত এবং ব্যাশে একটি উপ-প্রক্রিয়া তৈরি করে না। ব্যস্ত অপেক্ষা সবসময় খারাপ হবে।