【问题标题】:Why not have tomcat stop force as a synchronous operation为什么不让tomcat停止强制作为同步操作
【发布时间】: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 传递出去。这行得通吗?

标签: tomcat tomcat7 kill


【解决方案1】:

这可能适用于 Linux,但我认为 kill -0 仅适用于 Linux。

您当然可以在Apache Bugzilla 中提出增强请求。

请注意,它仍然不是“同步”操作...您只是轮询预期的条件。

【讨论】:

  • 感谢克里斯托弗提供的信息。对预期条件的轮询也是 catalina.sh stop 指令所做的事情,并且那里没有特定于操作系统/特定于架构的检查 - 所以我的猜测是该解决方案将适用于任何地方。此外,solaris 上的手册页似乎也表明对它的支持。是的,如果这种方式停止强制操作只是等待预期的结束条件并且不是真正同步的。将尝试制定此解决方案的工作副本并提交包含更改的 bugzilla 请求。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多