問題

如何在bash指令碼中等待從該指令碼產生的幾個子程序完成並返回退出程式碼! = 0當任何子程序以程式碼結束時!= 0?

簡單指令碼:

 #!/bin/bash
for i in `seq 0 9`; do
  doCalculations $i &
done
wait
 

上面的指令碼將等待所有10個生成的子程序,但它總是給出退出狀態0(見help wait).如何修改此指令碼,以便在任何子程序結束時發現生成的子程序的退出狀態,並返回退出程式碼1!= 0?

有沒有比收集子程序的PID更好的解決方案,按順序等待並和退出狀態?

  最佳答案

wait 也(可以選擇)接受程序的PID等待,並使用$!您得到在後臺啟動的最後一個命令的PID. 修改迴圈以將每個生成的子程序的 PID 儲存到陣列中,然後再迴圈等待每個 PID。

 # run processes and store pids in array
for i in $n_procs; do
    ./procs[${i}] &
    pids[${i}]=$!
done

# wait for all pids
for pid in ${pids[*]}; do
    wait $pid
done
 

  相同標籤的其他問題

bashprocesswait