#! /bin/bash IP="$1" PORT="$2" PROCS="$3" FILE="$4" PROCMAXTIME=60 MAINPID=$$ PGID=$(ps -o pgid= $MAINPID | grep -oe "[0-9]*") do_exit() { kill -9 -$PGID } trap do_exit SIGINT SIGTERM for i in $(seq 0 $(($PROCS-1))); do ( THISPID=$BASHPID # ( while kill -0 $MAINPID; do sleep 1; done; do_exit ) & while true; do ( THISPID2=$BASHPID ( sleep $PROCMAXTIME; kill -9 $THISPID2 >/dev/null 2>&1 ) & echo "starting $(($i+1)) / $PROCS" ( while kill -0 $THISPID2; do cat "$FILE"; done ) | nc "$IP" "$PORT" >/dev/null 2>&1 ) >/dev/null 2>&1 done ) & sleep $(echo "scale=2; ($PROCMAXTIME/$PROCS) + 1" | bc) done while true; do sleep 9999999; done