Eine begrenzte Anzahl von Kind-Prozessen parallel in bash ausführen?

Habe ich eine große Menge von Dateien, für die einige schwere Verarbeitung getan werden muss.
Diese Verarbeitung in einem einzelnen Thread, nutzt ein paar hundert MiB RAM (auf der Maschine verwendet, um den Auftrag zu starten) und dauert ein paar Minuten zu laufen.
Mein Aktueller Anwendungsfall ist zum start eines hadoop-Jobs auf die input-Daten, aber ich hatte das gleiche problem in anderen Fällen vor.

Um die volle Nutzung der verfügbaren CPU-Leistung will ich in der Lage laufen mehrere diese Aufgaben paralell.

Jedoch eine sehr einfache Beispiel-shell-Skript wie das Müll system-performance durch übermäßiges laden und austauschen:

find . -type f | while read name ; 
do 
   some_heavy_processing_command ${name} &
done

Also, was ich will, ist im wesentlichen ähnlich zu dem, was "gmake -j4" nicht.

Ich weiß die bash unterstützt die "warten" - Befehl, aber das nur wartet bis alle Kind-Prozesse beendet sind. In der Vergangenheit habe ich erstellt, ein Skript muss ein 'ps' Befehl und dann die grep-die Kind-Prozesse nach Namen (ja, ich weiß ... hässlich).

Was ist der einfachste/sauberste/beste Lösung, um zu tun, was ich will?


Edit: Danke an Frederik: ja, in der Tat ist dies ein Duplikat von Wie begrenzen Sie die Anzahl der threads/sub-Prozesse in einer Funktion in bash
Das "xargs --max-procs=4" funktioniert wie ein Charme.
(Also ich habe auf meine eigene Frage)

InformationsquelleAutor der Frage Niels Basjes | 2011-07-06

Schreibe einen Kommentar