Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merging changes done by Steven, Samuel and Luka, regarding simulation of StarPU-MPI
[simgrid.git] / src / smpi / smpirun.in
index e9e2b43..fb1754a 100755 (executable)
@@ -45,7 +45,11 @@ Options:
   -trace-viva                # generate configuration for Viva's GraphView
   -trace-file <tracefile>    # name of the tracefile (simgrid_smpi.trace)
   -ext <value>               # additional parameter (reserved)
-  
+  -foreground                # run the child process in the foreground:
+                             # - it can access the terminal;
+                             # - but we cannot stop it when we receive a signal.
+                             # This is useful with -wrapper "gdb --args".
+
   -version                   # Displays the SimGrid version (human readable)
   -git-version               # Displays the git hash of SimGrid
 
@@ -68,6 +72,9 @@ HOSTFILE=""
 HOSTFILETMP=0
 
 unset pid
+unset foreground ; foreground=0
+
+trapped_signals="HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS"
 
 smpirun_cleanup()
 {
@@ -92,17 +99,28 @@ smpirun_cleanup()
 }
 
 smpirun_trap() {
+  local sig
+  sig="$1"
+
+  # Cleanup and kill the child process:
   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
+
+  # Raise the same signal again (remove the traps first):
+  trap - $trapped_signals
+  kill -$sig $$
+
+  # This should never happen:
+  kill -ABRT $$
   kill -TERM $$
-  exit 128
 }
 
-trap smpirun_trap HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS
+for s in $trapped_signals; do
+  trap "smpirun_trap $s" $s
+done
 
 while true; do
     case "$1" in
@@ -227,6 +245,10 @@ while true; do
             done
             shift 1
             ;;
+        "-foreground")
+            foreground=1
+            shift 1
+            ;;
         *)
             break
             ;;
@@ -269,7 +291,7 @@ fi
 
 if [ -z "${HOSTFILE}" ] ; then
     HOSTFILETMP=1
-    HOSTFILE="$(mktemp tmphostXXXXXX)"
+    HOSTFILE="$(mktemp smpitmp-hostfXXXXXX)"
     perl -ne 'print "$1\n" if /.*<host.*?id="(.*?)".*?\/>.*/' ${PLATFORM} > ${HOSTFILE}
     perl -ne 'if (/.*<cluster.*?prefix="(.*?)".*?radical="(.*?)".*?suffix="(.*?)".*/) { 
                 my ($pre,$rad,$post)=($1,$2,$3); 
@@ -292,7 +314,7 @@ UNROLLEDHOSTFILETMP=0
 multiple_processes=`grep -c ":" $HOSTFILE`
 if [ "${multiple_processes}" -gt 0 ] ; then
     UNROLLEDHOSTFILETMP=1
-    UNROLLEDHOSTFILE="$(mktemp tmphostXXXXXX)"
+    UNROLLEDHOSTFILE="$(mktemp smpitmp-hostfXXXXXX)"
     perl -ne ' do{ for ( 1 .. $2 ) { print "$1\n" } } if /(.*?):(\d+).*/'  ${HOSTFILE}  > ${UNROLLEDHOSTFILE}
     if [ ${HOSTFILETMP} = 1 ] ; then
         rm ${HOSTFILE}
@@ -321,7 +343,7 @@ fi
 
 ##-------------------------------- DEFAULT or SPECIFIED PLATFORM --------------------------------------
 if [ -z "${PLATFORM}" ]; then
-    PLATFORMTMP="$(mktemp tmpXXXXXX)"
+    PLATFORMTMP="$(mktemp smpitmp-platfXXXXXX)"
 
     cat > ${PLATFORMTMP} <<PLATFORMHEAD
 <?xml version='1.0'?>
@@ -363,7 +385,7 @@ fi
 ##-------------------------------- end DEFAULT or SPECIFIED PLATFORM --------------------------------------
 
 ##-------------------------------- DEFAULT APPLICATION --------------------------------------
-APPLICATIONTMP="$(mktemp tmpXXXXXX)"
+APPLICATIONTMP="$(mktemp smpitmp-appXXXXXX)"
 #APPLICATIONTMP="app.xml"
 
 
@@ -385,7 +407,7 @@ if [ "${EXTOPT}" = "smpi_replay" ]; then
         hosttraces=$(cat ${APP_TRACES} | tr '\n\r' '  ' )
         NUMTRACES=$(cat ${APP_TRACES} | wc -l)
     else
-        printf "File not found: %s\n", "${APP_TRACES:-\${APP_TRACES\}}" >&2
+        printf "File not found: %s\n" "${APP_TRACES:-\${APP_TRACES\}}" >&2
         exit 1
     fi
 fi
@@ -489,17 +511,22 @@ export SMPI_GLOBAL_SIZE=${NUMPROCS}
 if [ -n "${KEEP}" ] ; then
     echo ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
     if [ ${HOSTFILETMP} = 1 ] ; then
-        echo "Generated hostfile ${HOSTFILE} keeped."
+        echo "Generated hostfile ${HOSTFILE} kept."
     fi
     if [ ${UNROLLEDHOSTFILETMP} = 1 ] ; then
-        echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} keeped." 
+        echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} kept." 
     fi
 fi
-${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} &
-pid=$!
-wait $pid
-status=$?
-pid=""
+if [ "$foreground" = 1 ]; then
+  ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
+  status=$?
+else
+  ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} &
+  pid=$!
+  wait $pid
+  status=$?
+  pid=""
+fi
 
 smpirun_cleanup