#!/bin/bash cmd1="$1" cmd2="$2" cleanup() { echo "kill $pid1 $pid2" [[ -n $pid1 ]] && kill "$pid1" 2>/dev/null [[ -n $pid2 ]] && kill "$pid2" 2>/dev/null exit } trap cleanup SIGINT SIGTERM eval "$cmd1" & pid1=$! eval "$cmd2" & pid2=$! wait "$pid1" "$pid2" cleanup