45 lines
962 B
Bash
45 lines
962 B
Bash
#! /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
|
|
} |