100 секунд - это время, в течение которого скрипт будет ожидать остановки процесса после выдачи сигнала уничтожения, прежде чем завершить его принудительно с помощью kill -9
.То, что процесс быстро останавливается, не означает, что это не было чистое завершение.
Из раздела справки catalina.sh:
echo " stop Stop Catalina, waiting up to 5 seconds for the process to end"
echo " stop n Stop Catalina, waiting up to n seconds for the process to end"
echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running"
echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running"
Обратите внимание на словоблудие , ожидающеедо n секунд ... процесс сразу сигнализируется, и сценарий ожидает до n секунд, пока PID исчезнет, прежде чем он отправит сигнал kill -9
.Обратите внимание, что скрипт catalina.sh спит по 1 секунде за раз, но только после того, как он отправил начальный сигнал выключения.
Вот соответствующие строки из скрипта, которые точно показывают, что происходит:
https://github.com/apache/tomcat/blob/a8c62dd061d4cf937c3bdec615121696916434eb/bin/catalina.sh#L525-L600
В общем:
- Отправьте
kill -15
процессу, что является нормальным постепенным завершением работы.Теперь JVM должна запустить свою последовательность завершения. - Отправьте
kill -0
процессу, чтобы проверить, жив он или нет.Если он жив, поспите 1 секунду и проверьте снова.Повторяйте это до тех пор, пока либо а) процесс не перестанет быть активным, либо б) параметр задержки (в вашем случае, 100 секунд) истек. - Если процесс все еще жив на этоми вы указали аргумент
-force
, скрипт в последний раз пытается отправить сигнал kill -9
в JVM.Этот сигнал фактически не может быть обработан JVM, и сама ОС вызывает немедленное отключение процесса (т. Е. Не постепенное отключение).
Обратите внимание, что все это произошло сразу же, без каких-либо задержек.Если вы хотите сделать искусственную паузу перед выполнением последовательности выключения, описанной выше, вы должны использовать sleep
перед вызовом catalina.sh:
sleep 100 && catalina.sh stop