2017-10-13 2 views
0

Ich möchte eine for-Schleife erstellen, wo ich immer N Funktionen gleichzeitig aufrufen. Sie sind nicht voneinander abhängig, ich möchte diese Schleife einfach parallel ausführen.Bash warten auf Hintergrundprozesse in Schleife

Meine Idee ist, meine Funktion als Hintergrundprozess zu nennen und nach jedem N-ten Aufruf möchte ich auf alle Hintergrundprozesse warten.

Aber irgendwie wartet es nicht ... Ich bin sicher, ich vermisse etwas offensichtlich.

#!/bin/bash 

fun(){ 
    for i in {1..5} 
    do 
     echo $i 
     sleep 1s 
    done 
} 


N=2 
(
for k in {1..8} 
do 
    ((i=i%N)) 
    # ((i++==0)) && (echo "waiting for all background processes" && wait) PROBLEM SOLVED: 
    ((i++==0)) && echo "waiting for all background processes" && wait 

    echo "i = $i" 
    fun & 
done 

wait 
) 

EDIT: es könnte etwas mit einem Sub-Shell zu tun haben ... Ich bin nicht sicher EDIT2: ja, es war, weil (echo "waiting for all background processes" && wait) in einer Subshell ausgeführt wurde ... das war das Problem

Antwort

0

ich fand die Antwort, es war wegen (echo "waiting for all background processes" && wait) in einer Subshell ausgeführt wurde ...

ich reparierte den Code

Verwandte Themen