-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=""