मुझे पता है कि मैं एक शर्त पर इंतज़ार कर सकता हूँ कि वह क्या कर सकता है:
while true; do
test_condition && break
sleep 1
done
लेकिन यह प्रत्येक पुनरावृत्ति (नींद) में 1 उप-प्रक्रिया बनाता है। मैं उन्हें करने से बच सकता था:
while true; do
test_condition && break
done
लेकिन यह CPU (व्यस्त प्रतीक्षा) का बहुत उपयोग करता है। उप-प्रक्रियाओं और व्यस्त प्रतीक्षा से बचने के लिए, मैं समाधान बेली के साथ आया, लेकिन मुझे यह बदसूरत लगता है:
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
से पहले उदाहरण में साथ जाने का सुझाव दूंगा। दूसरा काम, जबकि यह काम कर सकता है, भविष्य में किसी के लिए भी आसान नहीं होगा। सरल कोड भी सुरक्षित होने की बड़ी संभावनाएं हैं।
true
एक बिलिन है और बाश में उप प्रक्रिया नहीं बनाता है। व्यस्त प्रतीक्षा हमेशा खराब होगी।