代码之家  ›  专栏  ›  技术社区  ›  valodzka

压井-9和生产应用

  •  6
  • valodzka  · 技术社区  · 14 年前

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

    我有一些定期工作的应用程序,停止这些工作需要很长时间,而且我不关心某些工作是否会被中止——工作可以通过新的流程完成。所以我可以使用 杀戮9 立即停止,否则会导致严重的操作系统问题?

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

    当您的应用程序出错时,一个bofh可以“杀死-9”失控的工作进程,而不必担心将所有客户机都拆掉,只有一个。

    但这 article 声称:

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

    附言:我明白 杀戮9 不能由应用程序来处理,但我知道对于may应用程序,它不会造成任何问题,我只是很关心它是否会在操作系统级别引起一些问题? shared memory segments active, lingering sockets 听起来很危险。

    4 回复  |  直到 14 年前
        1
  •  1
  •   MarkR    14 年前

    这取决于它是哪种应用程序。

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

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

    例如,mysql数据库不是“仅崩溃”的,如果用kill-9杀死它,将导致启动时间(而不是完全关闭)、数据丢失,或者两者兼有,这取决于设置(在某种程度上,还取决于运气)。

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

        2
  •  4
  •   Brian Agnew    14 年前

    kill -9 不会给应用程序一个彻底关闭的机会。

    通常,应用程序可以捕获 SIGINT/SIGTERM 并完全关闭(关闭文件、保存数据等)。应用程序无法捕获 SIGKILL (发生在 杀戮9 )所以它不能做任何(可选的)清理。

    更好的方法是使用标准 kill ,如果应用程序仍然没有响应,则使用 杀戮9 .

        3
  •  2
  •   Matt Curtis    14 年前

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

        4
  •  0
  •   anon    14 年前

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