Если у вас есть возможность рефакторинга, вы можете использовать /proc/$PID
как более эффективный способ определения, запущен ли процесс.
stopSvc() { local svc=$1
read x pid x < <( ps -fu "$App_user" | grep -E " ($App_baseDIR/$1/|)$svc.jar$" ||: )
local -i starting="$(date +%s)" # linux epoch timestamp in seconds
while [[ -d "/proc/$pid" ]]
do ps -fp "$pid"
kill -term "$pid"
if (( ( $(date +%s) - starting ) < 20 )) # been trying for less than 20s
then sleep 2
date
else echo "$svc is hung - using a hard stop"
kill -KILL "$pid"
break
fi
done
sleep 2
[[ -d "/proc/$pid" ]] && return 1 || return 0 # flip the return
}
По сути, kill -15
- это сигнал term
, который процесс может перехватить, чтобы вызвать постепенное завершение работы, закрытие каналов, сокетов и файлов, очистку временного пространства и т. Д., Поэтому для полезности он должен дать некоторое время. -9
является kill
и не может быть пойман. Это Большой Молот , который вы используете, чтобы подавлять задания, которые плохо себя ведут, и должны быть зарезервированы для этих случаев.
Вы совершенно правы, в этом мало смысла. Если вы собираетесь использовать -9
так скоро, можете также пропустить небрежную попытку улучшить практику и просто удалить -15
.