साथ 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
काम नहीं करता है। प्रॉम्प्ट एकत्र किया जाता है और प्रॉम्प्ट (डिफ़ॉल्ट रूप से) प्रदर्शित होने से ठीक पहले बाहर निकलने की स्थिति को छोड़ दिया जाता है।