BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Parallel laufende Prozesse mit xargs starten

Verwendet man find und möchte man zum Beispiel mehrere Dateien mit bunzip2 entpacken werden die bunzip2 Prozesse nacheinander gestartet:

# find . -name "firefox-8.0*" -exec bunzip2 {} \; &
# ps aww | grep zip
43739   1  R+     0:02.14 bunzip2 ./firefox-8.0.1.source.tar.bz2

Verwendet man find und xargs, werden alle Dateinamen an einen bunzip2 Prozess übergeben, welche die Dateien auch nacheinander entpackt:

# find . -name "firefox-8.0*" | xargs bunzip2 &
# ps aww | grep zip
13729   1  R+     0:01.88 bunzip2 ./firefox-8.0.1.source.tar.bz2 ./firefox-8.0b3.source.tar.bz2 ./firefox-8.0b1.source.tar.bz2 ./firefox-8.0.source.tar.bz2 ./firefox-8.0.1.tar.bz2 ./firefox-8.0b6.source.tar.bz2 ./firefox-8.0b4.source.tar.bz2

Mit der -P Option von xargs kann nun angegeben werden wieviele Prozesse parallel gestartet werden sollen. Durch die -n Option wird nun jedem bunzip2 Prozess nur ein Argument, in diesem Falle ein Dateinamen übergeben.

# find . -name "firefox-8.0*" | xargs -n1 -P4 bunzip2 &
# ps aww | grep zip
14688   1  R+     0:01.66 bunzip2 ./firefox-8.0.1.source.tar.bz2
14796   1  R+     0:01.67 bunzip2 ./firefox-8.0b3.source.tar.bz2
14882   1  D+     0:01.63 bunzip2 ./firefox-8.0b1.source.tar.bz2
15165   1  R+     0:01.62 bunzip2 ./firefox-8.0.source.tar.bz2

Auf FreeBSD ist xargs standardmässig im Basissystem vorhanden. Mehr Informationen zu Sargs findet man in der Manpage xargs(1).

 Permalink