个人应用程序在Linux上做为后台进程运行。 它目前在终端窗口的命令行中启动。 shell
最近一个用户正在执行该应用程序一段时间,它神秘地死了。 文本: bash
杀害 工具
在终端上。 这发生了两次。 我问是否有人在不一样的终端使用kill命令来杀死进程? 没有。 spa
在什么条件下Linux会决定杀死个人进程? 我相信shell显示“已杀死”,由于该进程在收到kill(9)信号后死亡。 若是Linux发送了kill信号,系统日志中是否会有消息说明它被杀的缘由? 命令行
用于限制资源的PAM模块彻底致使了您描述的结果:个人进程神秘地死于控制台窗口上的文本Killed 。 在syslog和kern.log中都没有日志输出。 顶级程序帮助我发现,在一分钟的CPU使用后,个人进程被杀死了。 日志
我最近遇到了这个问题。 最后,我发现个人进程在自动调用Opensuse zypper更新后被终止。 禁用zypper更新解决了个人问题。 code
尝试: 进程
dmesg -T| grep -E -i -B100 'killed process'
-B100
表示杀戮发生前的行数。 内存
在Mac OS上省略-T 。 资源
正如dwc和Adam Jaskiewicz所说,罪魁祸首多是OOM杀手。 可是,接下来的问题是:如何防止这种状况发生?
有几种方法:
因为这篇文章 ,我发现(2)特别容易实现。
像systemtap(或跟踪器)这样的工具能够监视内核信号传输逻辑和报告。 例如, https://sourceware.org/systemtap/examples/process/sigmon.stp
# stap .../sigmon.stp -x 31994 SIGKILL SPID SNAME RPID RNAME SIGNUM SIGNAME 5609 bash 31994 find 9 SIGKILL
能够调整该脚本中的块if
过滤,以消除系统范围内的信号流量。 经过收集回溯能够进一步隔离缘由(分别为内核和用户空间添加print_backtrace()
和/或print_ubacktrace()
到探针。