The xargs utility allows to easily implement a process pool, where a constant
pool of workers processes a list of jobs in parallel. We use the
following example worker.sh:
#!/bin/bash echo "Called worker with args $@" sleep 2
The following call will run worker.sh 26 times, always keeping 5 processes
running in parallel.
xargs -L1 -P5 ./worker.sh <<EOF
a 1
b 2
c 3
--extra d 4
e 5
f 6
g 7
h 8
i 9
j 10
k 11
l 12
m 13
n 14
o 15
p 16
q 17
r 18
s 19
t 20
u 21
v 22
w 23
x 24
y 25
z 26
EOF
The -L1 argument ensures that each line below <<EOF is taken as one set of
parameters for worker.sh. The -P5 argument results in 5 processes.
An alternative would be to place the lines between <<EOF and EOF in a file
args.dat, and call <args.dat xargs -L1 -P5 ./worker.sh