summaryrefslogtreecommitdiff
path: root/runjobsparallel.in
diff options
context:
space:
mode:
Diffstat (limited to 'runjobsparallel.in')
-rwxr-xr-xrunjobsparallel.in56
1 files changed, 56 insertions, 0 deletions
diff --git a/runjobsparallel.in b/runjobsparallel.in
new file mode 100755
index 0000000..761aeee
--- /dev/null
+++ b/runjobsparallel.in
@@ -0,0 +1,56 @@
+#!/bin/bash
+#
+# #BINDIR#/runjobsparallel: run all executables in specified directory parallel
+# version #VERSION#
+#
+
+if [ ! -d "$1" ] || [ $# -ne 1 ]
+then
+ >&2 echo 'runjobsparallel version #VERSION#'
+ >&2 echo ''
+ >&2 echo "usage: $0 <dir>"
+ exit 1
+fi
+
+cd "$1" || exit 1
+
+tmpDir=$(mktemp -d #TMPDIR#/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
+ ps aux | awk '{print $2}' | grep -q "^${pids[${i}]}\$" && laeuftNoch=true || laeuftNoch=false
+
+ if [ -r ${errFiles[${i}]} ]
+ then
+ curErr=$(cat "${errFiles[${i}]}")
+ [ ${curErr} -gt ${maxErr} ] && maxErr=${curErr}
+ elif ${laeuftNoch}
+ then
+ allesDa=false
+ else
+ echo 255 > "${errFiles[${i}]}"
+ maxErr=255
+ fi
+ done
+done
+
+rm -rf ${tmpDir}
+
+exit ${maxErr}
+
+# End of file