猿问

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

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

我的应用程序在Linux上作为后台进程运行。它目前在终端窗口的命令行中启动。

最近,一个用户执行了一段时间的应用程序,它神秘地死去了。案文如下:

被杀

在终点站。这事发生过两次。我问在另一个终端的人是否使用了杀死命令来杀死这个过程?没有。

在什么情况下Linux会决定终止我的进程?我相信炮弹显示“被杀死”,因为这个过程在收到杀死(9)信号后就死了。如果Linux发送了杀死信号,那么系统日志中是否应该有一条消息来解释它被杀死的原因呢?


侃侃尔雅
浏览 433回答 3
3回答

婷婷同学_

这似乎是一篇关于这一主题的好文章:驯服OOM杀手.要点是linux超额承诺记忆。当一个进程请求更多的空间时,Linux将给它空间,即使它是由另一个进程声明的,前提是没有人真正使用他们所要求的所有内存。当进程实际使用它时,它将得到它所分配的内存的独占使用,而不是当它请求它的时候。这使得分配更快,并且可能允许您“欺骗”并分配比实际内存更多的内存。但是,一旦进程开始使用这个内存,Linux可能会意识到,它在分配内存时太慷慨了,并且不得不关闭一个进程来释放一些内存。要终止的进程基于考虑运行时(长时间运行的进程更安全)、内存使用(贪婪的进程不那么安全)和其他一些因素的评分,包括可以调整的值,以降低进程被杀死的可能性。这篇文章详细描述了这一切。编辑:下面是另一篇文章这很好地解释了如何选择一个进程(用一些内核代码示例进行注释)。最重要的是它包含了一些关于推理背后的各种badness()规则。
随时随地看视频慕课网APP
我要回答