Tôi tin rằng giả định của bạn là chính xác. Đây là một trích xuất man bash
liên quan đến việc chờ đợi các quá trình nền.
Nếu n chỉ định một quy trình hoặc công việc không tồn tại, trạng thái trả về là 127. Mặt khác, trạng thái trả về là trạng thái thoát của quy trình hoặc công việc cuối cùng được chờ đợi.
Vì vậy, có lẽ bạn nên kiểm tra 127
Có một câu hỏi tương tự với một câu trả lời hoàn toàn khác có thể giúp ích.
Tập lệnh Bash chờ xử lý và nhận mã trả về
chỉnh sửa 1
Lấy cảm hứng từ những bình luận và câu trả lời của @ Stephane, tôi đã mở rộng kịch bản của anh ấy. Tôi có thể bắt đầu khoảng 34 quy trình nền trước khi nó bắt đầu lỏng lẻo.
giật lùi
$ cat tback
plist=()
elist=()
slist=([1]=12 [2]=15 [3]=17 [4]=19 [5]=21 [6]=23)
count=30
#start background tasksto monitor
for i in 1 2 3 4
do
#echo pid $i ${plist[$i]} ${slist[$i]}
(echo $BASHPID-${slist[$i]} running; exit ${slist[$i]}) &
plist[$i]=$!
done
echo starting $count background echos to test history
for i in `eval echo {1..$count}`
do
echo -n "." &
elist[$i]=$!
done
# wait for each background echo to complete
for i in `eval echo {1..$count}`
do
wait ${elist[$i]}
echo -n $?
done
echo ""
# Now wait for each monitored process and check return status with expected
failed=0
for i in 1 2 3 4
do
wait ${plist[$i]}
rv=$?
echo " pid ${plist[$i]} returns $rv should be ${slist[$i]}"
if [[ $rv != ${slist[$i]} ]]
then
failed=1
fi
done
wait
echo "Complete $failed"
if [[ $failed = "1" ]]
then
echo Failed
else
echo Success
fi
exit $failed
$
trên hệ thống của tôi sản xuất
$ bash tback
14553-12 running
14554-15 running
14555-17 running
starting 30 background echos to test history
14556-19 running
..............................000000000000000000000000000000
pid 14553 returns 12 should be 12
pid 14554 returns 15 should be 15
pid 14555 returns 17 should be 17
pid 14556 returns 19 should be 19
Complete 0
Success
wait
không hoạt động. Quá trình được thu thập và trạng thái thoát bị loại bỏ ngay trước khi dấu nhắc được hiển thị (theo mặc định).