summaryrefslogtreecommitdiff
path: root/runjobsparallel
blob: 763d301fe1213afd1c124f0a120dc93e1ea7b81d (plain)
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
#!/bin/bash
#
# /usr/sbin/runjobsparallel: run all executables in specified directory parallel
#

if [ "$1" = "" ]; then
  echo "usage: $0 <dir>"
  exit 1
fi

cd $1 || exit 1

tmpDir=$(mktemp -d /tmp/runjobsparallel.XXXXXX)

for file in ./*; do
  if [ -f $file ] && [ -x $file ]; then
    i=${#errFiles[@]}
    errFiles[${i}]="${tmpDir}/err.${i}"
    (nice -n 19 $file; echo $? > ${errFiles[${i}]})&
    pids[${i}]=$!
  fi
done

allesDa=false
while ! ${allesDa}
do
  sleep 1
  allesDa=true
  maxErr=0
  for ((i=0; i<${#errFiles[@]}; i++))
  do
    if [ -r ${errFiles[${i}]} ]
    then
      curErr=$(cat "${errFiles[${i}]}")
      [ ${curErr} -gt ${maxErr} ] && maxErr=${curErr}
    elif ps aux | awk '{print $2}' | grep -q "^${pids[${i}]}\$"
    then
      allesDa=false
    else
      echo 255 > "${errFiles[${i}]}"
      maxErr=255
    fi
  done
done

rm -rf ${tmpDir}

exit ${maxErr}

# End of file