diff --git a/app/app.sh b/app/app.sh index cb67fd9..37a5fd6 100755 --- a/app/app.sh +++ b/app/app.sh @@ -1,8 +1,35 @@ #!/bin/bash +# Signal helper +source /app/signals.sh + echo Using DISPLAY $DISPLAY export XDG_RUNTIME_DIR=/tmp/runtime-doge -#export QT_QPA_PLATFORM=offscreen -#export QT_X11_NO_MITSHM=1 -#export QT_DEBUG_PLUGINS=1 -exec dogecoin-qt + +set -x + +PID=$$ +TERM_handler() { + SIGNAME="$1" + echo "Killing ${PID}" + echo "Signal ${SIGNAME}" + if [ ${PID} -ne 0 ]; then + ps -ef --forest + CHILDS=$(pgrep -P "${PID}") + kill -SIGTERM -"${PID}" + for i in $CHILDS; do + wait $i + done + fi + ps -ef --forest + ret=$(signal_return_val ${SIGNAME}) + exit $ret +} + +signals_trap_with_arg TERM_handler SIGTERM SIGINT + +# Application +dogecoin-qt& + +# wait forever +signals_wait_forever diff --git a/app/signals.sh b/app/signals.sh new file mode 100644 index 0000000..bd48be3 --- /dev/null +++ b/app/signals.sh @@ -0,0 +1,25 @@ +signals_trap_with_arg() { + func="$1" ; shift + for sig ; do + echo "$func $sig" + trap "$func $sig" "$sig" + done +} + +signals_wait_forever() { + while true + do + tail -f /dev/null & wait ${!} + done +} + +signal_name_to_number() { + SIGNAME="$1" + trap -l | sed -nr "s/.*\b([0-9]+)\) $SIGNAME.*/\1/p" +} + +signal_return_val() { + SIGNAME="$1" + SIGNUM=$(signal_name_to_number ${SIGNAME}) + echo "128 + $SIGNUM" | bc +}