Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.18 KB | None | 0 0
  1. #!/bin/sh
  2. declare -i MAXTHREADS=4
  3.  
  4. declare -i JOBS=100
  5. declare -i THREADS
  6.  
  7. endproc() {
  8.         [ -f $1 ] && rm $1
  9.         exit 0
  10. }
  11. jobproc() {
  12. echo "Testproc: $THREADS"
  13.         jobproc_end(){
  14.                 [ -f $1 ] && rm $1
  15.                 exit 0
  16.         }
  17.         if [ $SHELL~="bash" ]
  18.                 then MYPID="$BASHPID"
  19.                 else MYPID="$(sh -c 'echo $PPID')"
  20.         fi
  21.         echo "$MYPID" >> $1
  22.         chmod -x $1
  23.  
  24.         local -i TIME="$(echo $RANDOM | head -c 1)"
  25.         sleep $TIME     # Job activity imitation
  26.  
  27.         if [ -f $1 ]; then
  28.                 while [ -x $1 ]; do sleep 0.1; done
  29.                 chmod +x $1
  30.                 TMPPIDLIST=$(mktemp -u $TMPDIR/prlzr-$$-XXXXXXXX)
  31.                 trap "jobproc_end \$TMPPIDLIST" INT
  32.                 cat $1 | grep -v "$MYPID" > $TMPPIDLIST
  33.                 cat $TMPPIDLIST > $1
  34.                 chmod -x $1
  35.                 jobproc_end $TMPPIDLIST
  36.         fi
  37. }
  38.  
  39. gettmpfs() {
  40. local TMPFS
  41. local TMPDIR
  42. case "$(uname)" in
  43.         SunOS)  TMPFS=swap;;
  44.         *)      TMPFS=tmpfs;;
  45. esac
  46.  
  47. local TMPDIR_RAWLIST="$(mount | grep $TMPFS)"
  48. if [ -n "$TMPDIR_RAWLIST" ]; then
  49.         if [ -n "$(echo $TMPDIR_RAWLIST | grep '/dev/shm')" ]; then
  50.                 TMPDIR=/dev/shm
  51.         else
  52.                 TMPDIR=$(echo $TMPDIR_RAWLIST | head -n 1 | cut -d ' ' -f 1);
  53.         fi
  54. fi
  55. echo "$TMPDIR"
  56. }
  57.  
  58. TMPDIR=$(gettmpfs)
  59. if [ -z $TMPDIR ]; then TMPDIR=/tmp; fi
  60. FLOCK=$(mktemp -u $TMPDIR/prlzr-$$-XXXX)
  61. trap "endproc \$FLOCK" INT
  62. touch $FLOCK; chmod -x $FLOCK
  63.  
  64. while [ $JOBS -gt 0 ]; do
  65.         echo "While begin: $THREADS"
  66.         while [ -x $FLOCK ]; do sleep 0.1; done
  67.         chmod +x $FLOCK
  68.         THREADS=$(wc -l $FLOCK | cut -d ' ' -f 1)
  69.         chmod -x $FLOCK
  70.         if [ $THREADS -lt $MAXTHREADS ]; then
  71.                 echo "If begin: $THREADS"
  72.                 chmod +x $FLOCK
  73.                 jobproc $FLOCK &
  74.                 while [ -x $FLOCK ]; do sleep 0.1; done
  75.                 JOBS=$JOBS-1
  76.                 echo "Jobs: $JOBS"
  77.                 echo "If end: $THREADS"
  78.         else
  79.                 sleep 0.1;
  80.         fi
  81.         echo "While end: $THREADS"
  82. done
  83.  
  84. endproc $FLOCK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement