diff --git a/tools/traffic-generator.sh b/tools/traffic-generator.sh index ee9d212..5c645fc 100755 --- a/tools/traffic-generator.sh +++ b/tools/traffic-generator.sh @@ -18,6 +18,7 @@ IPERF_UDP_PORT=5202 STOP=0 MAIN_PID=$$ KEYPRESS_PID="" +ACTIVE_PID="" usage() { cat </dev/null 2>&1 || true + wait "$KEYPRESS_PID" >/dev/null 2>&1 || true fi } @@ -105,20 +112,38 @@ on_interrupt() { STOP=1 } +kill_command_group() { + local pid="$1" + if [[ -z "$pid" ]]; then + return + fi + + kill -TERM -- "-$pid" >/dev/null 2>&1 || kill "$pid" >/dev/null 2>&1 || true + sleep 0.1 + kill -KILL -- "-$pid" >/dev/null 2>&1 || kill -KILL "$pid" >/dev/null 2>&1 || true +} + run_interruptible() { - "$@" & + if has_cmd setsid; then + setsid "$@" & + else + "$@" & + fi local pid=$! + ACTIVE_PID="$pid" while kill -0 "$pid" >/dev/null 2>&1; do if [[ "$STOP" -eq 1 ]]; then - kill "$pid" >/dev/null 2>&1 || true + kill_command_group "$pid" wait "$pid" >/dev/null 2>&1 || true + ACTIVE_PID="" return 130 fi sleep 0.1 done wait "$pid" >/dev/null 2>&1 || true + ACTIVE_PID="" return 0 }