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


14

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

我听说过kill -9kill -SIGKILL不好,但是我不明白为什么。如果我不应该kill -9有什么我做杀死一个进程?


2
问题的前提是错误的。SIGKILL只是一个工具。在某些情况下建议使用它,而在其他情况下不建议使用(其他所有工具也一样)。
kubanczyk

@kubanczyk可以肯定,但这是一个经常被误用的工具,在使用时并未理解其目的。我见过很多线程,其中A表示,“ 只要kill -9 ”,OP说:“ 很好,这工作!我会记住,从现在开始! ”,和B进来警告“ 等待kill -9是危险的!只是事后”。
dimo414

Answers:


15

SIGKILL将地毯从运行过程中拉出,立即终止。对于非常简单的程序,这很好。但是实际上,很少有“简单”程序。

在后台,即使是琐碎的程序也可以执行终止之前需要清理的各种事务处理工作(finally例如Java和其他编程语言中的块),例如关闭资源句柄,删除临时文件以及从中清除数据内存到磁盘。您无法预期程序何时会执行类似的操作。

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

您几乎永远不需要发送SIGKILL,并且应该确保在发送之前已经用尽了所有替代方法。在许多情况下,重新启动(最终会将SIGKILLs 发送到行为不正常的程序)比手动发送SIGKILL自己的安全性更高。我可以一方面可能算我的次数需要发送一个SIGKILL(可能都是我自己造成的)。

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

一些进一步的阅读:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.