私はforループを持っていますので、一度に並列に4回処理したいと思います。 私はページhttps://unix.stackexchange.com/questions/103920/parallelize-a-bash-for-loopから次のコードを試してみました:BASHのNプロセスバッチで並列実行
task(){
sleep 0.5; echo "$1";
}
N=4
(
for thing in a b c d e f g; do
((i=i%N)); ((i++==0)) && wait
task "$thing" &
done
)
私は次のように私はそれを得る出力され、test.shとして上記のファイルを格納しています
path$ ./test.sh
a
b
c
d
path$ e
f
g
とカーソルが」doesnのを私の端末に戻ってきます。カーソルが私の端末に戻ってきて、なぜ出力 'e'に先行する私のパスがあるのか理解できません。 'a'から 'g'まで連続して表示され、コードは停止するはずですか?
そのループが別のループ内ではありませんので、あなたのコードは、一度だけループで7つの物事を行います。しかし、あなたはループを4回処理したいと言いますか?だから、本当に28の処理すべきことはありますか? –
全体のオーダーはどうすればよいですか? a、b、c&dはすべてすべてが終了するまで並行して実行され、e、f、g&aはすべて並行して実行されます。 –
yes @MarkSetchellすべてが終了するまで並行して実行する、b、c&dはすべて並行して実行します。 – pku