首页 > 解决方案 > 检测到子进程因操作系统内存不足而被杀死

问题描述

我正在开发一个大型应用程序,它产生了许多处理各种任务的进程。在某些情况下,由于内存压力,操作系统会杀死我的一个进程。没关系,这完全在意料之中,父进程优雅地处理了这个。

我想知道的是找出一个进程被杀死的原因。如果因为记忆压力而被杀死,我想稍后重生治疗。如果它因任何其他原因而被杀死——例如,因为断言失败或内存访问越界,我想记录并调查。

所以,这是我的问题:你如何发现一个子进程因为操作系统需要内存而被杀死?

问题适用于:

进程以 root/admin 身份运行。

标签: c++windowsmacosunixmemory

解决方案


在 Linux 上,您可以阅读syslog以了解进程是否被操作系统杀死。您可以通过阅读syslog(某些发行版上的 /var/log/messages 或 /var/log/syslog )或通过dmesg命令来调查它。如果您生成了该进程,您还可以检测到它被SIGKILL(9)信号杀死,而不是SIGSEGV(11)对应于应用程序自行崩溃的信号,并且SIGINT(2)/SIGTERM(15)这意味着应用程序被要求优雅地终止。

关于 Windows,我只知道可以通过Application Event Log. 有一个GUI 应用程序可以帮助您进行设置。


推荐阅读