gpt4 book ai didi

c - 如何在 Linux 上限制子进程中的内存使用并在内存不足时检查它

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:53 26 4
gpt4 key购买 nike

我使用setrlimit API 来限制子进程资源并在父进程上检查。

当子进程超过内存限制时,它会被一个SIGSEV信号终止,但我有一些其他原因也导致了SIGSEV信号,所以我无法判断子进程是否超出内存限制。

有没有办法知道子进程是否超出内存限制?

最佳答案

这取决于达到了哪个限制。

如果您的内存限制(-d-v)被命中,malloc(resp.底层brk()/sbrk()-call) 将失败,返回值为 NULL。如果不检查此错误条件,您的程序现在只会出现段错误。您可以检查 near 地址 0 的访问(结构成员访问),然后尝试猜测它是否是未经检查的 malloc 访问。如果您知道,您不会在任何地方进行 malloc 检查,您还可以编写一个带有 assert(ret != NULL); 或类似内容的包装器。

如果达到堆栈限制(-s),情况就不同了;一个进程只是访问栈附近的内存,操作系统会自动扩大栈;或者它没有,如果达到限制。您可以通过查看导致错误的地址(在您的处理程序的 siginfo_t 结构中)并检查它是否在您的堆栈附近来识别这一点。

所有其他 ulimit 不应产生段错误。

关于c - 如何在 Linux 上限制子进程中的内存使用并在内存不足时检查它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com