【发布时间】:2012-10-15 12:04:39
【问题描述】:
在 Tomcat 7 中,当使用 catalina.sh stop force 停止容器时,脚本使用 CATALINA_PID 环境变量向当前运行的容器进程的 pid 发送 kill -9。但是,这不会杀死 process instantaneously - 例如当进程处于系统调用中间时。在这种情况下,为什么我们不能在非强制模式下(在 catalina.sh 中)使用与 stop 一起使用的 kill -0 ``cat "$CATALINA_PID"`` >/dev/null 2>&1 技巧?这将确保stop force 是同步的。只是想知道是否有充分的理由不这样做。
提前致谢!
编辑:
为此使用 Tomcat 记录了 bugzilla enhancement ticket。
【问题讨论】:
-
你的意思是为什么+不能+我们使用那个技巧?无论如何,这里无法回答您的问题。试试 Tomcat 开发者的邮件列表。
-
还将尝试开发邮件列表。谢谢!
-
我不认为
kill -0做你认为它做的事。kill -0不会同步发送信号:它会检查您是否可以向特定进程发送信号。你仍然需要发送信号(比如kill -9)。而且它总是异步的。除非你wait在这个过程中,除非这个过程可能永远不会完成,所以你可能会被挂断。 -
@ChristopherSchultz 我在想,在发出
kill -9之后,我们可以在while循环中等待KILL_WAIT_INTERVAL(以确保及时结束)检查进程是否仍然存在(通过kill -0)。因此,只有当 1. 进程不再处于活动状态或 2. 超过其KILL_WAIT_INTERVAL时,控制才会从 catalina.sh 传递出去。这行得通吗?