我正在使用Tomcat 8.x.x,并使用startup.sh启动tomcat。我使用JPS命令验证了tomcat是否已启动并正在运行。我正在使用 catalina.sh stop 100 停止Tomcat。如catalina shell脚本所述,它将等待100秒以终止tomcat进程。但是tomcat进程立即终止,已通过JPS命令验证。
为什么正常关机无法正常工作?
如何在Tomcat中实现正常关机?
答案 0 :(得分:1)
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秒钟,但仅在它发送了初始关闭信号之后才会休眠。
以下是脚本中的相关行,它们向您确切显示正在发生的事情:
通常:
kill -15
,这是正常的正常关机。现在由JVM启动终止序列。kill -0
,以检查其是否有效。如果还活着,请睡一秒钟,然后再次检查。重复此操作,直到a)该过程不再存在,或b)延迟参数(在您的情况下为100秒)过去。-force
参数,那么脚本将最后一次尝试向JVM发送kill -9
信号。该信号实际上不能由JVM处理,并且操作系统本身会强制立即关闭进程(即,不正常关闭)。请注意,所有这些都立即发生,没有任何延迟。如果要在尝试上述关闭顺序之前有一些人为的暂停,则应在调用catalina.sh之前使用sleep
:
sleep 100 && catalina.sh stop