#! /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
}