Hintergrund : Ich habe eine Bash -Funktion namens forkrun geschrieben, die den Code für Sie auf die gleiche Weise parallelisiert, wie dies parallel oder xargs -p tut. Es ist schneller als parallel und hat eine ähnliche Geschwindigkeit wie, hat jedoch mehr Optionen als Xargs -p . Forkrun funktioniert, indem er eine Reihe persistenter Bash -Coprocs laich sind parallelisieren. Dies muss die "Overhead" -KPU -Verwendung des Coproc -Ausgangs seines Schleifens und enthalten. bei jeder Schleifener Iteration). Ich muss also die CPU-Verwendung von allen Coproc Pids + ihren Kindern (und Enkelkindern und Urenkelkindern und ...) total verabschiedet. >: Ich möchte Forchrun dynamisch bestimmen, wie viele Coprocs basierend auf Laufzeitbedingungen laichen werden sollen. Ein Teil meiner Strategie dazu besteht darin, herauszufinden, wie viel CPU -Zeit (im Durchschnitt) jedes dieser Coprocs in Anspruch nimmt. Die aktuelle Implementierung für "dynamisches Coproc -Laichen" führt dies durch die Betrachtung der Gesamtsystemlast (durch Wahl/Proc/Stat ) vor und nach der Entstehung einiger Coprocs, aber dies ist sehr laut statt und ziehen Sie die Felder von Utime , Stime , Cutime und CStime aus. Leider berücksichtigt dies nur die CPU -Zeit für
auf Kinder. d.h. Sie geben es auf und rufen dann Wait auf. Es enthält nicht die CPU -Zeit für Dinge wie "Stuff in Subshells". Ich habe viel Aufwand aufgewendet, um sicherzustellen, dass Forkrun praktisch keine Abhängigkeiten hat - derzeit sind die einzigen harten Abhängigkeiten eine aktuelle Bash -Version, eine montierte Procfs und einige Binärdateien für grundlegende Dateisystemoperationen (Operationen (
, mkdir ). Wenn ein externes Werkzeug absolut erforderlich ist, dann bin ich zu 99% sicher, dass ich diese Informationen aus Procfs herausholen kann *irgendwie.
Danke im Voraus!