ulimit设置coredump文件大小

本文详细介绍了如何在Linux系统中设置coredump文件大小为0但仍能捕获core文件的方法,包括临时、半永久和永久设置,以及C/C++代码中通过`setrlimit`实现的设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux系统中,如果coredump文件大小设为0,即使程序发生了core dump(segment fault)也没有core文件产生。
设置core file size的方法有:

  1. 临时设置
    只在当前shell有效:
ulimit -c 0
ulimit -c unlimited
  1. 永久设置
    编辑/etc/security/limits.conf,需要重新登录,或者重新打开ssh客户端连接,永久生效
*     soft   core unlimited
*     hard  core unlimited
  1. 半永久设置
    vim /etc/profile
    相当于每开一个shell时,自动执行ulimit -c unlimited
ulimit -c unlimited
  1. C/C++代码中设置
 #include <sys/resource.h>
void init_core_dump()
{
    struct rlimit limit;
 
    memset(&limit, 0, sizeof(limit));
    limit.rlim_cur = RLIM_INFINITY; //软限制,表示对资源没有限制
    limit.rlim_max = RLIM_INFINITY; //硬限制,这个参数表示对资源没有限制,一定要大于等于rlim_cur值
    setrlimit(RLIMIT_CORE, &limit);
}
 
int main(void)
{
    init_core_dump();
 
    return 0;
}

[Ref]
https://www.cnblogs.com/whwywzhj/p/13272653.html
https://blog.csdn.net/kq1983/article/details/83443907

### 配置 Linux 系统中 coredump 文件的最大尺寸限制 在 Linux 中,`ulimit` 命令用于控制进程的资源使用情况,其中包括核心转储文件(core dump)的大小。为了配置 coredump 文件的最大尺寸限制,可以通过 `ulimit` 设置不同的选项。 #### 查看当前的核心转储文件大小限制 要查看当前会话中的核心转储文件大小限制,可以输入以下命令: ```bash ulimit -c ``` 如果返回值为 0,则表示不允许创建 core dump 文件;其他数值则代表以 blocks (通常每 block 是 512 字节) 计算的最大 core 文件大小[^2]。 #### 将核心转储文件大小设为无限大 为了让程序崩溃时能够生成完整的 core dump 文件而不受大小限制的影响,应将此值设置成 "unlimited": ```bash ulimit -c unlimited ``` 这行指令将会把该 shell session 的最大 core 文件大小设定为不受限状态,从而允许记录尽可能多的信息来帮助调试应用程序错误[^1]。 #### 设定固定大小的核心转储文件 除了不限制外,还可以指定具体的大小给 core 文件: ```bash ulimit -c [size_in_blocks] ``` 这里 `[size_in_blocks]` 表示希望限定的具体大小,单位是 blocks,默认情况下一块等于 512 bytes。注意最小需要至少4才能成功生成 core 文件。 需要注意的是,在某些环境中可能会遇到权限不足的问题,比如普通用户尝试更改这些限制时收到 “无法修改 limit 值: 不允许的操作”的提示。此时应该考虑以 root 用户身份操作或者联系管理员协助调整系统级别的配置[^3]。 另外对于服务器环境而言,建议采用更详细的命名模式以便管理和分析产生的 core 文件。例如通过 `/proc/sys/kernel/core_pattern` 来定义带有时间戳、进程 ID 和执行文件名称等信息在内的路径模板[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值