【问题标题】:kill -9 and production applicationkill -9 和生产应用程序
【发布时间】:2011-02-28 03:20:34
【问题描述】:

哪个问题会导致生产应用程序中的kill -9(确切地说是在linux中)?

我的应用程序执行一些定期工作,停止这些工作需要很长时间,而且我不在乎某些工作是否会中止 - 工作可以通过新流程完成。那么我可以使用kill -9 来立即停止它,否则会导致严重的操作系统问题?

例如Unicorn,作为正常工作程序使用:

当您的应用程序出错时,BOFH 可以“杀死 -9”失控的工作进程,而不必担心会破坏所有客户端,只需一个。

但这article声称:

不应在 Unix 系统上使用 kill(1) 的 -9(或 KILL)参数

PS:我知道kill -9 无法由应用程序处理,但我知道对于可能的应用程序它不会导致任何问题,我只是想知道它会导致操作系统级别的一些问题吗? shared memory segments active, lingering sockets 对我来说听起来很危险。

【问题讨论】:

  • 一般来说,永远不要使用kill -9 的建议是好的——当你对你的软件有足够的了解,知道什么时候可以忽略该建议时,你就可以不用担心,发疯了你想要的。

标签: linux kill operating-system unicorn


【解决方案1】:

kill -9 不会让应用程序有机会干净地关闭。

通常应用程序可以捕获SIGINT/SIGTERM 并干净地关闭(关闭文件、保存数据等)。应用程序无法捕获 SIGKILL(与 kill -9 一起发生),因此它无法执行任何此类(可选)清理。

更好的方法是使用标准kill,如果应用程序仍然无响应,则使用kill -9

【讨论】:

    【解决方案2】:

    kill -9 不会导致任何“严重的操作系统问题”。但该过程将立即停止,这意味着它可能会使数据处于奇怪的状态。

    【讨论】:

      【解决方案3】:

      这取决于它是什么类型的应用程序。

      像数据库这样的东西可能会丢失数据(如果它没有一次将所有数据写入持久事务日志),或者下次启动需要更长的时间,或两者兼而有之。

      虽然Crash-only是一个很好的原则,但目前很少有应用程序符合它。

      例如,mysql 数据库不是“仅崩溃”,使用 kill -9 杀死它会导致启动时间显着延长(比完全关闭)、数据丢失或两者兼而有之,具体取决于设置(和在某种程度上,运气)。

      另一方面,Cassandra 实际上鼓励使用 kill -9 作为关闭机制;它不支持其他任何东西。

      【讨论】:

        【解决方案4】:

        应用程序无法捕获 KILL 信号。如果应用程序在您杀死它时正在将一些复杂的数据结构写入磁盘,则该结构可能只写入了一半,从而导致数据文件损坏。通常最好将其他一些信号(例如 USER1)实现为“停止”信号,因为它可以被捕获并允许应用程序以受控方式关闭。

        【讨论】:

          猜你喜欢
          • 2017-09-29
          • 2016-02-24
          • 2012-12-01
          • 1970-01-01
          • 2021-09-07
          • 2016-07-26
          • 1970-01-01
          • 1970-01-01
          • 2016-05-02
          相关资源
          最近更新 更多