Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
smpirun: cleanup files and children before dying
[simgrid.git] / src / smpi / smpirun.in
index 812acdb..e9e2b43 100755 (executable)
@@ -65,6 +65,44 @@ fi
 EXTOPT=""
 WRAPPER=""
 HOSTFILE=""
+HOSTFILETMP=0
+
+unset pid
+
+smpirun_cleanup()
+{
+  if [ -z "${KEEP}" ] ; then
+      if [ -z "${PLATFORM}" -a -n "$PLATFORMTMP" ]; then
+        rm -f ${PLATFORMTMP}
+        PLATFORMTMP=""
+      fi
+      if [ ${HOSTFILETMP} = 1 -a -n "$HOSTFILE" ] ; then
+          rm -f ${HOSTFILE}
+          HOSTFILE=""
+      fi
+      if [ ${UNROLLEDHOSTFILETMP} = 1 -a -n "$UNROLLEDHOSTFILE" ] ; then
+          rm -f ${UNROLLEDHOSTFILE}
+          UNROLLEDHOSTFILE=""
+      fi
+      if [ -n ${APPLICATIONTMP} ]; then
+        rm -f ${APPLICATIONTMP}
+        APPLICATIONTMP=""
+      fi
+  fi
+}
+
+smpirun_trap() {
+  smpirun_cleanup
+  if ! [ -z "$pid" ]; then
+    kill -TERM $pid
+  fi
+  unset pid
+  trap - HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS
+  kill -TERM $$
+  exit 128
+}
+
+trap smpirun_trap HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS
 
 while true; do
     case "$1" in
@@ -229,7 +267,6 @@ if [ -z "${HOSTFILE}" ] && [ -z "${PLATFORM}" ] ; then
     exit 1
 fi
 
-HOSTFILETMP=0
 if [ -z "${HOSTFILE}" ] ; then
     HOSTFILETMP=1
     HOSTFILE="$(mktemp tmphostXXXXXX)"
@@ -458,20 +495,12 @@ if [ -n "${KEEP}" ] ; then
         echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} keeped." 
     fi
 fi
-${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
+${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} &
+pid=$!
+wait $pid
 status=$?
+pid=""
 
-if [ -z "${KEEP}" ] ; then
-    if [ -z "${PLATFORM}" ]; then
-       rm ${PLATFORMTMP}
-    fi
-    if [ ${HOSTFILETMP} = 1 ] ; then
-        rm ${HOSTFILE}
-    fi
-    if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
-        rm ${UNROLLEDHOSTFILE}
-    fi
-    rm ${APPLICATIONTMP}
-fi
+smpirun_cleanup
 
 exit $status