Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- declare -i MAXTHREADS=4
- declare -i JOBS=100
- declare -i THREADS
- endproc() {
- [ -f $1 ] && rm $1
- exit 0
- }
- jobproc() {
- echo "Testproc: $THREADS"
- jobproc_end(){
- [ -f $1 ] && rm $1
- exit 0
- }
- if [ $SHELL~="bash" ]
- then MYPID="$BASHPID"
- else MYPID="$(sh -c 'echo $PPID')"
- fi
- echo "$MYPID" >> $1
- chmod -x $1
- local -i TIME="$(echo $RANDOM | head -c 1)"
- sleep $TIME # Job activity imitation
- if [ -f $1 ]; then
- while [ -x $1 ]; do sleep 0.1; done
- chmod +x $1
- TMPPIDLIST=$(mktemp -u $TMPDIR/prlzr-$$-XXXXXXXX)
- trap "jobproc_end \$TMPPIDLIST" INT
- cat $1 | grep -v "$MYPID" > $TMPPIDLIST
- cat $TMPPIDLIST > $1
- chmod -x $1
- jobproc_end $TMPPIDLIST
- fi
- }
- gettmpfs() {
- local TMPFS
- local TMPDIR
- case "$(uname)" in
- SunOS) TMPFS=swap;;
- *) TMPFS=tmpfs;;
- esac
- local TMPDIR_RAWLIST="$(mount | grep $TMPFS)"
- if [ -n "$TMPDIR_RAWLIST" ]; then
- if [ -n "$(echo $TMPDIR_RAWLIST | grep '/dev/shm')" ]; then
- TMPDIR=/dev/shm
- else
- TMPDIR=$(echo $TMPDIR_RAWLIST | head -n 1 | cut -d ' ' -f 1);
- fi
- fi
- echo "$TMPDIR"
- }
- TMPDIR=$(gettmpfs)
- if [ -z $TMPDIR ]; then TMPDIR=/tmp; fi
- FLOCK=$(mktemp -u $TMPDIR/prlzr-$$-XXXX)
- trap "endproc \$FLOCK" INT
- touch $FLOCK; chmod -x $FLOCK
- while [ $JOBS -gt 0 ]; do
- echo "While begin: $THREADS"
- while [ -x $FLOCK ]; do sleep 0.1; done
- chmod +x $FLOCK
- THREADS=$(wc -l $FLOCK | cut -d ' ' -f 1)
- chmod -x $FLOCK
- if [ $THREADS -lt $MAXTHREADS ]; then
- echo "If begin: $THREADS"
- chmod +x $FLOCK
- jobproc $FLOCK &
- while [ -x $FLOCK ]; do sleep 0.1; done
- JOBS=$JOBS-1
- echo "Jobs: $JOBS"
- echo "If end: $THREADS"
- else
- sleep 0.1;
- fi
- echo "While end: $THREADS"
- done
- endproc $FLOCK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement