-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
HOSTFILETMP=0
unset pid
-unset foreground ; foreground=0
trapped_signals="HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS"
shift 1
;;
"-foreground")
- foreground=1
+ # Nothing to do, compatibility.
shift 1
;;
*)
echo "Generated unrolled hostfile ${UNROLLEDHOSTFILE} kept."
fi
fi
-if [ "$foreground" = 1 ]; then
- ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP}
- status=$?
-else
- ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} &
- pid=$!
- wait $pid
- status=$?
- pid=""
-fi
+
+# Execute the process
+#
+# The shell still need to be alive for the duration in order to do some cleanup
+# after the process.
+#
+# We are going through great lengths in order to both keep stdin and be able
+# to handle signals:
+#
+# * The job is launched in the background in order to be able to handle
+# signals.
+#
+# * The FD 3 is used to temporarily store FD 1. This is because the shell
+# connects FD 1 to /dev/null when the command is launched in the
+# background: this can be overriden in bash but not in standard bourne shell.
+exec 3<&0
+${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} <&3 3>&- &
+pid=$!
+exec 3>&-
+wait $pid
+status=$?
+pid=""
smpirun_cleanup