ฉันเชื่อว่าสมมติฐานของคุณถูกต้อง นี่คือสารสกัดจากการman bash
รอกระบวนการพื้นหลัง
หาก n ระบุกระบวนการหรืองานที่ไม่มีอยู่สถานะการส่งคืนคือ 127 มิฉะนั้นสถานะการส่งคืนคือสถานะการออกของกระบวนการล่าสุดหรืองานที่รอ
ดังนั้นบางทีคุณควรตรวจสอบ 127
มีคำถามที่คล้ายกันกับคำตอบที่แตกต่างไปจากเดิมอย่างสิ้นเชิงอาจช่วยได้
สคริปต์ Bash รอกระบวนการและรับรหัสส่งคืน
แก้ไข 1
ได้รับแรงบันดาลใจจากความคิดเห็นและคำตอบของ @ Stephane ฉันได้ขยายสคริปต์ของเขา ฉันสามารถเริ่มกระบวนการพื้นหลังได้ประมาณ 34 ครั้งก่อนที่มันจะเริ่มหลวม
tback
$ 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
$
ในระบบของฉันผลิต
$ 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
ไม่ทำงาน กระบวนการจะถูกรวบรวมและสถานะการออกจะถูกทิ้งก่อนที่จะปรากฏข้อความแจ้งเตือน (ตามค่าเริ่มต้น)