#! /bin/bash -- killa() { if [[ "$1" != 'none' ]]; then if [[ "$2" == "" ]]; then SIGNAL=15 else SIGNAL="$2" fi case "$SIGNAL" in 15) echo >&2 "stopping $1..." ;; 9) echo >&2 "killing $1..." ;; *) echo >&2 "sending signal $SIGNAL to $1..." ;; esac kill -"$SIGNAL" "$1" 2>/dev/null fi } stop() { PID_DA_WAITARE=() for pid in "$@"; do if [[ "$pid" != 'none' ]]; then PID_DA_WAITARE+=("$pid") killa "$pid" fi done { if sleep 5; then for pid in "$@"; do killa "$pid" 9 done wait fi }& SLEEP_PID=$! wait "${PID_DA_WAITARE[@]}" #aspetto solo i pid nei parametri, non sleep...& # se questo kill fallisce vuol dire che il ciclo con sleep 5 è terminato -> è servito killare qualche processo kill "$SLEEP_PID" 2>/dev/null && echo >&2 "Tutti i processi terminati normalmente" exit 0 }