จะรอสคริปต์ bash สำหรับหลาย ๆ subprocesses ที่เกิดจาก script นั้นเพื่อเสร็จสิ้นและส่งกลับ code exit! = 0 เมื่อกระบวนการย่อยใด ๆ จบลงด้วย code! = 0?
สคริปต์ง่าย ๆ :
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
สคริปต์ด้านบนจะรอการประมวลผลย่อยทั้งหมด 10 รายการ แต่จะให้สถานะการออก 0 เสมอ (ดูhelp wait
) ฉันจะแก้ไขสคริปต์นี้ได้อย่างไรเพื่อให้ค้นพบสถานะการออกของโพรเซสย่อยที่เกิดและกลับรหัสทางออก 1 เมื่อโพรเซสใด ๆ ที่ลงท้ายด้วยรหัส! = 0?
มีวิธีแก้ปัญหาที่ดีกว่าการรวบรวม PID ของกระบวนการย่อยรอให้อยู่ในลำดับและสถานะทางออกรวมหรือไม่
wait -n
มีปัญหาเล็ก ๆ น้อยหนึ่ง: หากไม่มีงานย่อยที่เหลืออยู่ (สภาพการแข่งขัน) จะส่งคืนสถานะทางออกที่ไม่ใช่ศูนย์ (ล้มเหลว) ซึ่งสามารถแยกไม่ออกจากกระบวนการย่อยที่ล้มเหลว
wait -n
มีอยู่ใน bash ทันสมัยเพื่อกลับเฉพาะเมื่อคำสั่งแรก / ถัดไปเสร็จสมบูรณ์