forked from smooks/unedifact
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy paththreaded.sh
executable file
·108 lines (93 loc) · 2.2 KB
/
threaded.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/bin/bash
#Credits http://pebblesinthesand.wordpress.com/2008/05/22/a-srcipt-for-running-processes-in-parallel-in-bash/
NUM=0
QUEUE=""
MAX_NPROC=2 # default
USAGE="A simple wrapper building edifact in parallel.
Usage: `basename $0` [-h] [-d] [-j nb_jobs] command arg_list
-h Shows this help
-d Deploy artifacts
-j nb_jobs Set number of simultanious jobs [2]
Examples:
`basename $0` d96a d13b - build only d96a and d13b
`basename $0` -j 3 -d - build and deploy all"
function queue {
QUEUE="$QUEUE $1"
NUM=$(($NUM+1))
}
function regeneratequeue {
OLDREQUEUE=$QUEUE
QUEUE=""
NUM=0
for PID in $OLDREQUEUE
do
if [ -d /proc/$PID ] ; then
QUEUE="$QUEUE $PID"
NUM=$(($NUM+1))
fi
done
}
function checkqueue {
OLDCHQUEUE=$QUEUE
for PID in $OLDCHQUEUE
do
if [ ! -d /proc/$PID ] ; then
regeneratequeue # at least one PID has finished
break
fi
done
}
function exec_mvn {
if [ -d $1 ]; then
pushd $1
if [ $DEPLOY = "yes" ]; then
echo "Deploying $1"
mvn clean deploy
else
echo "Installing $1"
mvn clean install
fi
popd
fi
}
# parse command line
if [ $# -eq 0 ]; then # must be at least one arg
echo "$USAGE" >&2
exit 1
fi
while getopts j:rh OPT; do # "j:" waits for an argument "h" doesnt
case $OPT in
h) echo "$USAGE"
exit 0 ;;
j) MAX_NPROC=$OPTARG ;;
d) echo "Deploying is turned ON!"
DEPLOY="yes"
shift ;;
\?) # getopts issues an error message
echo "$USAGE" >&2
exit 1 ;;
esac
done
# Main program
echo Using $MAX_NPROC parallel threads
shift `expr $OPTIND - 1` # shift input args, ignore processed args
if [ $# -eq 0 ];
then
set ./parent ./d*
else
set ./parent $*
fi
for directory;
do
if [ -d "$directory" ]; then
eval "exec_mvn $directory &"
# DEFINE COMMAND END
PID=$!
queue $PID
while [ $NUM -ge $MAX_NPROC ]; do
checkqueue
sleep 0.4
done
fi
done
wait # wait for all processes to finish before exit