#!/bin/bash netns="$1" shift child_ps=0 forward_kill() { sig="$1" echo "Caught signal SIG$sig!" if [ "$child_ps" != "0" ]; then echo "Killing $child_ps with SIG$sig!" kill -SIG${sig} $child_ps else exit 0 fi } forward_kill_int() { forward_kill "INT" } forward_kill_term() { forward_kill "TERM" } forward_kill_usr1() { # Special signal received from osmo-gsm-tester to tell child to SIGKILL echo "Converting SIGUSR1->SIGKILL" forward_kill "KILL" } # Don't use 'set -e', otherwise traps are not triggered! trap forward_kill_int INT trap forward_kill_term TERM trap forward_kill_usr1 USR1 #TODO: Later on I may want to call myself with specific ENV and calling sudo in order to run inside the netns but with dropped privileges ip netns exec $netns "$@" & child_ps=$! echo "$$: waiting for $child_ps" wait "$child_ps" child_exit_code="$?" echo "child exited with $child_exit_code" exit $child_exit_code