为了账号安全,请及时绑定邮箱和手机立即绑定

是什么扼杀了我的进程为什么?

是什么扼杀了我的进程为什么?

侃侃尔雅 2019-07-09 16:35:21
是什么扼杀了我的进程为什么?我的应用程序在Linux上作为后台进程运行。它目前在终端窗口的命令行中启动。最近,一个用户执行了一段时间的应用程序,它神秘地死去了。案文如下:被杀在终点站。这事发生过两次。我问在另一个终端的人是否使用了杀死命令来杀死这个过程?没有。在什么情况下Linux会决定终止我的进程?我相信炮弹显示“被杀死”,因为这个过程在收到杀死(9)信号后就死了。如果Linux发送了杀死信号,那么系统日志中是否应该有一条消息来解释它被杀死的原因呢?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

这似乎是一篇关于这一主题的好文章:驯服OOM杀手.

要点是linux超额承诺记忆。当一个进程请求更多的空间时,Linux将给它空间,即使它是由另一个进程声明的,前提是没有人真正使用他们所要求的所有内存。当进程实际使用它时,它将得到它所分配的内存的独占使用,而不是当它请求它的时候。这使得分配更快,并且可能允许您“欺骗”并分配比实际内存更多的内存。但是,一旦进程开始使用这个内存,Linux可能会意识到,它在分配内存时太慷慨了,并且不得不关闭一个进程来释放一些内存。要终止的进程基于考虑运行时(长时间运行的进程更安全)、内存使用(贪婪的进程不那么安全)和其他一些因素的评分,包括可以调整的值,以降低进程被杀死的可能性。这篇文章详细描述了这一切。

编辑:下面是另一篇文章这很好地解释了如何选择一个进程(用一些内核代码示例进行注释)。最重要的是它包含了一些关于推理背后的各种badness()规则。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 432 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信