36 lines
801 B
Bash
Executable file
36 lines
801 B
Bash
Executable file
#!/bin/sh
|
|
|
|
NUM=0
|
|
QUEUE=""
|
|
MAX_NPROC=12
|
|
|
|
while read CMD; do
|
|
sh -c "$CMD" &
|
|
|
|
PID=$!
|
|
QUEUE="$QUEUE $PID"
|
|
NUM=$(($NUM+1))
|
|
|
|
# if enough processes were created
|
|
while [ $NUM -ge $MAX_NPROC ]; do
|
|
# check whether any process finished
|
|
for PID in $QUEUE; do
|
|
if [ ! -d /proc/$PID ]; then
|
|
TMPQUEUE=$QUEUE
|
|
QUEUE=""
|
|
NUM=0
|
|
# rebuild new queue from processes
|
|
# that are still alive
|
|
for PID in $TMPQUEUE; do
|
|
if [ -d /proc/$PID ]; then
|
|
QUEUE="$QUEUE $PID"
|
|
NUM=$(($NUM+1))
|
|
fi
|
|
done
|
|
break
|
|
fi
|
|
done
|
|
sleep 0.5
|
|
done
|
|
done
|
|
wait
|