我有以下bash腳本,它並行啓動一個程序幾次並將控制變量傳遞給每個執行。 該程序利用了多個資源,所以在它並行啓動10次之後,我想等到最後10個啓動完成。等待最後10個並行啓動的作業在bash中完成
我目前正在做這個非常粗略的工作,只需等待10次迭代就可以完成10個並行啓動程序的最長時間。
是否有直接的方法來實現這種行爲?
steps=$((500/20))
echo $steps
START=0
for((i=START;i < steps; i++))
do
for((j=START;j < steps;j++))
do
for((k=START;k < steps;k++))
do
n=$(($j*steps +$k))
idx=$(($i*$steps*$steps + $n))
if ! ((idx % 10)); then
echo "waiting for the last 10 programs"
sleep 10
else
./someprogram $idx &
fi
done
done
done
如果你要跟蹤是否程序成功或失敗,您將需要存儲他們的PID。 PID和'idx'之間的關聯數組映射特別有用,因爲它可以讓你知道哪個'idx's成功和失敗了。 –
順便說一下,這種方法作爲一個整體通常效率很低 - 在批次中的第一個程序完成時和最後一個程序完成時,通常會有一堆浪費的CPU時間。最好使用'for((k = start; k
@CharlesDuffy謝謝你,我看到那篇文章,並且我不太清楚,由於使用了一個異步設備,它依賴於等待時間來完成作業,所以我的情況是否可以關閉。但是,您的答案是否已經提供了等待該程序或僅用於啓動? – Kev1n91