【发布时间】:2020-03-15 00:42:03
【问题描述】:
我正在开发一个大型应用程序,该应用程序产生了许多用于处理各种任务的进程。在某些情况下,由于内存压力,操作系统会杀死我的一个进程。没关系,完全在意料之中,父进程优雅地处理了这个。
我想知道的是找出进程被杀死的原因。如果因为记忆压力而被杀死,我想稍后重生治疗。如果它因任何其他原因而被杀死——例如,因为断言失败或内存访问越界,我想记录并调查。
那么,我的问题是:如何发现子进程因操作系统需要内存而被杀死?
问题适用于:
- 窗户;
- MacOS;
- Linux;
- (对于奖励积分,我也对 Android 感兴趣,但这不是我的首要任务)。
进程未以 root/admin 身份运行。
【问题讨论】:
-
在某些情况下,由于内存压力,操作系统会杀死我的一个进程。 多么可怕的不可靠配置。如果操作系统决定杀死你的父进程怎么办?人们想知道为什么他们的系统有 9 个 5 的可靠性而不是所需的 5 个 9...
-
嗯,我们正在与操作系统合作以确保它杀死子进程而不是父进程。但是您还能如何处理操作系统上的内存不足情况呢?
-
禁用out-of-fuel, err, out-of-memory killer,并禁用内存过量使用,为系统配置适当数量的交换空间,这样操作系统就不必通过告诉进程谎言它可以使用所有这些内存,然后在进程胆敢实际使用内存操作系统说它可以时杀死它。 “哎呀,对不起,我谎报关于你可以使用多少内存!HAAA HAAA!你DEAD!!!”是如果你想要可靠性,那就太糟糕了。
-
啊,这就是现在所有用户操作系统的工作方式。我不会为此写一个新的操作系统:)
-
啊,好吧,这就是现在所有用户操作系统的工作方式。 不,不是。您实际上可以将系统配置为可靠。首先,您在您所谓的“用户操作系统”上运行生产流程做什么?
标签: c++ windows macos unix memory