哪个问题可能导致 kill -9 在生产应用中(准确地说是Linux)?

我的应用程序可以进行一些定期工作,停止这些工作需要很长时间,而且我不在乎某些工作是否会流产 - 可以通过新的过程完成工作。所以我可以使用 kill -9 只是立即停止它,还是可能引起严重的操作系统问题?

例如, 独角兽, ,将其用作正常工作程序:

当您的应用程序出现问题时,BOFH可以“杀死-9”失控的工艺过程,而不必担心所有客户都会拆除。

但是这个 文章 主张:

杀死的-9(或杀死)论点(1)绝不应在UNIX系统上使用

PS:我知道 kill -9 无法通过应用程序来处理,但是我知道,对于可能的应用不会引起任何问题,我只是很感兴趣,它会在OS级别上引起一些问题吗? shared memory segments active, lingering sockets 听起来对我来说很危险。

有帮助吗?

解决方案

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

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

虽然 只坠毁 是一个很好的原则,目前很少有应用程序符合它。

例如,MySQL数据库不是“仅崩溃”,而用杀死-9杀死它将导致启动时间明显更长(比干净的关闭),数据丢失或两者兼有,取决于设置(并在某种程度上) , 运气)。

另一方面, 卡桑德拉 实际上鼓励使用-9用作关闭机制;它没有其他支持。

其他提示

kill -9 没有给申请干净地关闭的机会。

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

更好的方法是使用标准 kill, ,如果应用程序不响应,请使用 kill -9.

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top