साथ bash, आपको लगता है कि गारंटी होगा जब तक आप एक और पृष्ठभूमि काम शुरू कर दिया है (और सावधान रहना कि पृष्ठभूमि नौकरियों के साथ शुरू किया जा सकता &है लेकिन यह भी साथ coprocके बीच और इस प्रक्रिया प्रतिस्थापन के साथ) foo &और wait।
POSIX के लिए आवश्यक है कि एक शेल जाने के बाद कम से कम 25 नौकरियों की निकास स्थिति कोbash याद रखे , लेकिन इससे बहुत अधिक याद रखता है।
अब, यदि आप करते हैं:
foo & pid=$!
...
bar &
wait "$pid"
आपको इस बात की कोई गारंटी नहीं है कि barउसे उसी तरह की पीडा नहीं दी जाएगी foo( जैसा fooकि समय barशुरू होने पर समाप्त हो गया है ), इसलिए भले ही इसकी संभावना न wait "$pid"हो , आपको बाहर निकलने की स्थिति दे सकती है bar।
आप इसे पुन: प्रस्तुत कर सकते हैं:
bash -c '(exit 12; foo) & pid=$!
while : bar & [ "$pid" != "$!" ]; do :;done
wait "$pid"; echo "$?"'
जो (अंततः) आपको 0इसके बदले देगा 12।
समस्या से बचने के लिए, इसे लिखने का एक तरीका होगा:
{
foo_pid=$!
while ps -p "$foo_pid"
do
ping -c 1 localhost
done
bar &
...
read <&3 ret
if [ "$ret" = 0 ]; then
echo foo was sucessful.
fi
} 3< <(foo > logfile 2>&1; echo "$?")
waitकाम नहीं करता है। प्रॉम्प्ट एकत्र किया जाता है और प्रॉम्प्ट (डिफ़ॉल्ट रूप से) प्रदर्शित होने से ठीक पहले बाहर निकलने की स्थिति को छोड़ दिया जाता है।