Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- RESULTS=$1
- shift
- MAX_PROCESSES=$1
- shift
- COMMAND=$1
- shift
- ARGUMENTS=$@
- IFS=$'\n'
- FILTERED_RESULTS=()
- for result in ${RESULTS[@]}
- do
- [[ -z "${result//$'\n'}" ]] && continue
- FILTERED_RESULTS+=($result)
- done
- HOUSEKEEPING_FILE=/tmp/$$
- echo -ne > $HOUSEKEEPING_FILE
- i=0
- for result in ${FILTERED_RESULTS[@]}
- do
- (echo work for: $result; echo $ARGUMENTS $result | xargs $COMMAND; echo 1 >> $HOUSEKEEPING_FILE) &
- i=$(($i + 1))
- if [ $i -eq $MAX_PROCESSES ]
- then
- echo "MAX PROCESSES SPAWNED"
- while [ `wc -l $HOUSEKEEPING_FILE | cut -d' ' -f1` -lt $MAX_PROCESSES ]
- do
- echo "WAITING FOR PROCESS SLOT"
- sleep 1
- done
- echo -ne > $HOUSEKEEPING_FILE
- i=0
- fi
- done
- while [ `wc -l $HOUSEKEEPING_FILE | cut -d' ' -f1` -lt $i ]
- do
- sleep 1
- done
- rm $HOUSEKEEPING_FILE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement