我的一个进程被 OOM Killer 杀死了,这让我思考,为什么 Linux 内核还要费心发送 SIGKILL?我的意思是我知道为什么,要有序地终止该进程。
然而,Linux 内核是否有能力……删除进程?没有其他进程可以知道被删除的进程发生了什么?删除适当向量和结构中的条目并继续?
据推测,这将使依赖于该进程的合理行为的所有其他进程处于危险状态。但考虑到这种行为的不合理性,这似乎是公平的。需要明确的是,这个问题更多的是“我们能做到吗?”而不是我们应该这样做。我保证我不会在生产数据库服务器上这样做。
答案1
流程并不存在于真空中。他们有一个父母(也许是孩子)进程在等待着他们。他们也可能持有其他人所需的资源......
所以,只是消失是行不通的,涉及很多工作,你必须通知系统的其他部分。
为什么要发送信号而不是简单地发送信号只是在做马上就可以吗?嗯,这是一种干净的方式,您可以重用逻辑。未捕获的信号SIGTERM
(或者例如任何捕获的信号,然后退出)将或多或少地执行相同的操作。您还可以通过一种连贯的方式向父级报告该情况,并且只需一段代码即可处理所有这些情况。