#!/bin/sh
# LocalWorkflowPARALLEL:makeWorkflowTemplate
# SubmissionScripts/Client/Workflow/PARALLEL/make
#
trap cleanup HUP INT QUIT ABRT TERM

cleanup()
{
   echo "Abnormal termination by signal"
   parallelRunPID=$(pgrep -f "@@{EXECUTABLE} -f @@{INSTANCEDIRECTORY}")
   if [ -n "${parallelRunPID}" ] ; then
      for pid in $(pstree -pn ${parallelRunPID} | grep -o "([[:digit:]]*)" | grep -o "[[:digit:]]*" | grep -v ${parallelRunPID}) ; do
         kill -0 ${pid} 2> /dev/null && {
            kill -TERM ${pid}
         }
      done
   fi
}

exitStatus=0

TIMEPATH=
for timePath in /bin/time /usr/bin/time /usr/local/bin/time ; do
   if [ -x ${timePath} ] ; then
      TIMEPATH=${timePath}
      break
   fi
done

cd @@{INSTANCEDIRECTORY}

date +"%s" > @@{TS_START}

${TIMEPATH} --format "Command exited with status %x\nreal %e\nuser %U\nsys %S" -o @@{TIME_RESULTS} \
             @@{EXECUTABLE} @@{ARGUMENTS} \
             < /dev/null 2> @@{INSTANCEDIRECTORY}/@@{RUNNAME}.stderr &
wait %1
exitStatus=$?

date +"%s" > @@{TS_FINISH}

exit ${exitStatus}
