+HOSTFILETMP=0
+
+unset pid
+
+trapped_signals="HUP INT QUIT ILL ABRT SEGV FPE ALRM TERM USR1 USR2 BUS"
+
+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() {
+ local sig
+ sig="$1"
+
+ # Cleanup and kill the child process:
+ smpirun_cleanup
+ if ! [ -z "$pid" ]; then
+ kill -TERM $pid
+ fi
+ unset pid
+
+ # Raise the same signal again (remove the traps first):
+ trap - $trapped_signals
+ kill -$sig $$
+
+ # This should never happen:
+ kill -ABRT $$
+ kill -TERM $$
+}
+
+for s in $trapped_signals; do
+ trap "smpirun_trap $s" $s
+done