diff --git a/src/Misc/layoutroot/run.sh b/src/Misc/layoutroot/run.sh index ca9e5247d61..e6610a7f82e 100755 --- a/src/Misc/layoutroot/run.sh +++ b/src/Misc/layoutroot/run.sh @@ -9,16 +9,52 @@ while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symli [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" -# run the helper process which keep the listener alive -while :; -do - cp -f "$DIR"/run-helper.sh.template "$DIR"/run-helper.sh - "$DIR"/run-helper.sh $* - returnCode=$? - if [[ $returnCode -eq 2 ]]; then - echo "Restarting runner..." - else - echo "Exiting runner..." - exit 0 - fi -done + +run() { + # run the helper process which keep the listener alive + while :; + do + cp -f "$DIR"/run-helper.sh.template "$DIR"/run-helper.sh + "$DIR"/run-helper.sh $* + returnCode=$? + if [[ $returnCode -eq 2 ]]; then + echo "Restarting runner..." + else + echo "Exiting runner..." + exit 0 + fi + done +} + +runWithManualTrap() { + # Set job control + set -m + + trap 'kill -INT -$PID' INT TERM + + # run the helper process which keep the listener alive + while :; + do + cp -f "$DIR"/run-helper.sh.template "$DIR"/run-helper.sh + "$DIR"/run-helper.sh $* & + PID=$! + wait -f $PID + returnCode=$? + if [[ $returnCode -eq 2 ]]; then + echo "Restarting runner..." + else + echo "Exiting runner..." + # Unregister signal handling before exit + trap - INT TERM + # wait for last parts to be logged + wait $PID + exit 0 + fi + done +} + +if [[ -z "$RUNNER_MANUALLY_TRAP_SIG" ]]; then + run +else + runWithManualTrap +fi \ No newline at end of file