İ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 coproc
araları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 bar
erdiyse) ile aynı pid'in verilmeyeceğine dair bir garantiniz yok , bu yüzden olası olmasa bile size çıkış durumunu verebilir .foo
foo
bar
wait "$pid"
bar
Şununla çoğaltabilirsiniz:
bash -c '(exit 12; foo) & pid=$!
while : bar & [ "$pid" != "$!" ]; do :;done
wait "$pid"; echo "$?"'
ki (sonunda) size 0
bunun 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).