linux - 防止由于高内存使用而导致系统挂起

标签 linux memory process architecture operating-system

在我安装了 Ubuntu 的计算机上,我可以通过运行一个占用大量内存的简单程序来卡住整个 GUI。在那之后,我什至无法使用 GUI 来停止或暂停有问题的程序。

如何配置我的操作系统才能避免出现此问题?

Android、Windows 10、Mac 或 iOS 是否存在类似问题?

这是C++程序。

#define L 256*1024*1024
int main()
{
    while(1)
    {
        char *c=new char[L];
        for(long i=0;i<L;i++)
            c[i]='a';
    }
    return 0;
}

编辑:此程序在 Windows 8.1 中也会导致问题。甚至 Alt-Ctrl-Del 也不起作用。

最佳答案

我相信进程限制(由 bash 中的 ulimit 命令控制)是您正在寻找的。您可以使用 ulimit -v 设置您的进程可以分配的最大虚拟内存量,参数是以 KB 为单位的大小。例如,运行:

ulimit -v 100000

运行您的程序之前,应该在它耗尽系统内存之前将其终止(see Ubuntu page for more information)。请注意,限制是继承的,即您的 ulimit 命令正在为您的 shell 设置限制,然后由它启动的所有子进程继承。

关于linux - 防止由于高内存使用而导致系统挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48883037/

相关文章:

linux - 我如何使用 grep 和 awk 从文件中获取某些列和某些行

c - 字符串数组访问错误

linux - CMA问题(设计错误)

process - Dart将长标准输出数据拆分为两个ProcessResult事件

c# - 尝试以编程方式运行容器时从 Docker 退出代码 125

c - 管道进程的输出不完全符合预期。为什么? (C、UNIX)

linux - 如何在 python 中调用 linux 系统调用 PROCESS_VM_READV?

c++ - 文件 * 和 istream : connect the two?

linux - 检查 Web 应用程序是否已启动

memory - 使用 1 个 malloc 调用为二维矩阵分配内存