Ich schreibe ein kleines Skript, das Archive im Hauptthread erstellt und nach jedem Archivieren wird ein neuer Thread erstellt, indem eine Funktion aufgerufen wird, die sich um das Hochladen dieser Archive kümmert. Der Grund für das Hochladen im Hintergrund besteht darin, dass ein anderes Archiv erstellt werden kann, während die vorherigen Archive hochgeladen werden.Bash-Threading: Warten auf das Ende aller Job-Threads funktioniert nicht?
Das Problem, das ich habe, ist am Ende des Skripts. Das heißt, der Haupt-Thread wartet nicht darauf, dass alle Upload-Threads vor dem Beenden beendet werden. Schauen Sie sich die folgenden vereinfachten Skript (I entfernt/geändert Teile des Codes nicht mit dem Problem)
function func {
for files in /home/somewhere/
do
echo "Uploading $1" &
done
wait
}
find /home/some/path -type f | while read filename ; do
echo "Creating archive of $filename"
func $somevariable &
done
wait
Alles ist sehr schön ausgeführt wird, bis das letzte Archiv erstellt wird, dann wird das Skript beendet, bevor alle func
Threads zu beenden, viele Dateien nicht hochgeladen.
Vielen Dank für Ihre Ideen.
@Andrew: welches OS verwendest du? Mir sind einige Solaris-Builds bekannt, die genau so einen Wartefehler haben. –
@martin clayton: Ich benutze Ubuntu Server 9.10 – Gargauth