为什么我不应该使用“kill -9”/SIGKILL

为什么我不应该使用“kill -9”/SIGKILL

发布这个问题是因为我很惊讶没有直接回答它;如果这是重复的,我深表歉意 - 我确实看过!

我听说过kill -9或者kill -SIGKILL很糟糕,但我不明白为什么。如果我不应kill -9该做什么应该我要杀死一个进程吗?

答案1

SIGKILL将地毯从正在运行的进程中拉出,立即终止它。对于非常简单的程序来说这很好;然而实际上,“简单”的程序很少。

在幕后,即使是看似微不足道的程序也会在终止前执行各种需要清理的事务性工作(想想finallyJava 和其他编程语言中的块),例如关闭资源句柄、删除临时文件以及刷新其中的数据。内存到磁盘。您无法预测程序何时会执行此类操作。

如果您幸运的话,发送 时您不会注意到任何问题SIGKILL,但您不可能永远幸运,并且您可能不知道出了什么问题,直到为时已晚,无法恢复丢失的内容。

您几乎不需要发送SIGKILL,并且您应该确保在这样做之前您已经用尽了所有其他选择。在许多情况下,重新启动(最终会将SIGKILLs 发送到行为不当的程序)比手动发送 s 更安全SIGKILL。我大概一只手就能数出我经历过的次数需要的发送一个SIGKILL(很可能都是我自己制作的)。

一般来说,您可以使用Ctrl+ C(向前台进程发送 a SIGINT)或SIGTERM(如“终止”)来指示进程停止正在执行的操作并退出。

一些进一步阅读:

相关内容