c++ - 检测到子进程因操作系统内存不足而被杀死
问题描述
我正在开发一个大型应用程序,它产生了许多处理各种任务的进程。在某些情况下,由于内存压力,操作系统会杀死我的一个进程。没关系,这完全在意料之中,父进程优雅地处理了这个。
我想知道的是找出一个进程被杀死的原因。如果因为记忆压力而被杀死,我想稍后重生治疗。如果它因任何其他原因而被杀死——例如,因为断言失败或内存访问越界,我想记录并调查。
所以,这是我的问题:你如何发现一个子进程因为操作系统需要内存而被杀死?
问题适用于:
- 视窗;
- 苹果系统;
- Linux;
- (对于奖励积分,我也对 Android 感兴趣,但这不是我的首要任务)。
进程未以 root/admin 身份运行。
解决方案
在 Linux 上,您可以阅读syslog
以了解进程是否被操作系统杀死。您可以通过阅读syslog
(某些发行版上的 /var/log/messages 或 /var/log/syslog )或通过dmesg
命令来调查它。如果您生成了该进程,您还可以检测到它被SIGKILL(9)
信号杀死,而不是SIGSEGV(11)
对应于应用程序自行崩溃的信号,并且SIGINT(2)
/SIGTERM(15)
这意味着应用程序被要求优雅地终止。
关于 Windows,我只知道可以通过Application Event Log
. 有一个GUI 应用程序可以帮助您进行设置。
推荐阅读
- c++ - C++ 17 中 Clang 的不明确部分特化
- kubernetes - 如何将 OpenStack 卷附加到 Kubernetes 静态 Pod?
- android - Android Studio 空属性窗口
- java - 奥利奥上的插座打不开
- c++ - cout 流的“%-[width]s”的 C++ 等价物是什么?
- javascript - 如何获取存储在开放图层变量中的鼠标坐标?
- node.js - Cloud9 不会在 nodejs lambda 中公开 bash_profile 导出
- python - Web Scraper 不会转到正确的页面
- visual-studio-code - VSCode 正则表达式从特定组中查找和选择数据(不替换)
- c++ - 无法访问派生类中的基类方法