如何多次更改核心文件大小限制
How to change core file size limit multiple times?
我想多次更改核心文件大小。我使用以下代码:
#include <errno.h>
#include <iostream>
#include <string.h>
#include <sys/prctl.h>
#include <sys/resource.h>
void SetNewCoreSizeLimit(unsigned new_size) {
rlimit resource_limit;
resource_limit.rlim_cur = resource_limit.rlim_max = static_cast<rlim_t>(new_size);
if (setrlimit(RLIMIT_CORE, &resource_limit) == -1) {
std::cerr << strerror(errno) << std::endl;
}
}
int main() {
SetNewCoreSizeLimit(5);
SetNewCoreSizeLimit(10);
return 0;
}
setrlimit 的第一次调用成功,第二次调用失败,打印"不允许操作"。为什么?
仔细阅读 setrlimit(2):
每个资源都有关联的软限制和硬限制。
你正在改变这两个。设置硬限制后,您将无法提高它(在普通过程中):
EPERM
一个非特权进程试图提高硬性限制; 执行此操作需要CAP_SYS_RESOURCE能力。
EINVAL
资源中指定的值无效;或者,对于 setrlimit() 或 prlimit():rlim->rlim_cur
大于rlim->rlim_max
。
您可能应该只设置软限制:
resource_limit.rlim_cur = static_cast<rlim_t>(new_size);
resource_limit.rlim_max = RLIM_INFINITY;
或者使用 getrlimit
查询以前的限制并保留其.rlim_max
字段。
你的 shell 可能已经设置了一些限制(例如,在你的~/.bashrc
中使用ulimit
)。
您可以尝试cat /proc/self/limits
在 shell 中查询您的限制(以可理解的、文本的方式)
请注意,具有 root 访问权限的用户仍然可以使用 gcore(1)(或者使用 proc(5) 到 /proc/$(pidof yourapp)/maps
& /proc/$(pidof yourapp)/mem
等来获取进程内的数据)
相关文章:
- 读取某些文件时出现分段错误,似乎与文件大小无关
- 构建挂起,即使是适度的文件大小
- 如何在Windows内核中获取文件大小
- 为什么 QFileSystemWatcher 会发出多个信号?而 QFileInfo 首次写入零文件大小
- 使用 C++ iOS::ate 获取错误的文件大小
- 相同的源代码,不同的可执行文件大小?
- 为什么未关闭的文件大小为 4 字节
- lighttpd:启用cgi二进制文件的核心转储
- 读取二进制文件大小的短自上周以来停止工作
- 如何减小C++标准库libstdc++.so文件大小
- 文件大小和缓冲区过冲
- 如何从范围 v3 的istream_range中检索文件大小?
- 如何使用直接IO编写一个带有扩展文件大小的小文件
- 如何使用文件系统库获取"true"文件大小?(C++17)
- 如何限制文件大小,以便我的程序在变大之后创建一个新文件?并编辑新创建的文件的名称
- 如何使用C 17获取文件大小
- HttpQueryInfo 获取文件大小
- 如何计算预期的核心文件大小
- 如何多次更改核心文件大小限制
- ulimit对核心文件大小不起作用?