İle bash, başka bir arka plan işi başladıktan sürece bu garantiyi gerekecek (ve dikkat bu arka plan işleri ile başlatılabilir &ama aynı zamanda birlikte coprocaralarında ve süreç ikamesi ile) foo &ve wait.
POSIX, bir kabuğun gittikten sonra en az 25 işin çıkış durumunubash hatırlamasını , ancak bundan çok daha fazlasını hatırlamasını gerektirir.
Şimdi, eğer yaparsanız:
foo & pid=$!
...
bar &
wait "$pid"
( Zaman başladıktan sonra sona barerdiyse) ile aynı pid'in verilmeyeceğine dair bir garantiniz yok , bu yüzden olası olmasa bile size çıkış durumunu verebilir .foofoobarwait "$pid"bar
Şununla çoğaltabilirsiniz:
bash -c '(exit 12; foo) & pid=$!
while : bar & [ "$pid" != "$!" ]; do :;done
wait "$pid"; echo "$?"'
ki (sonunda) size 0bunun yerine verecek 12.
Problemden kaçınmak için bir yol şöyle yazar:
{
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çalışmaz. İşlem toplanır ve komut istemi görüntülenmeden hemen önce çıkış durumu atılır (varsayılan olarak).