You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

setrlimit调用失败返回EINVAL且rlim_max为0的问题求助

RLIMIT_CORE调用setrlimit返回EINVAL且rlim_max=0的原因与解决办法

原因分析

  • 当getrlimit返回的rlim_max为0,说明系统对core文件大小的硬限制被锁死在0,进程的软限制(rlim_cur)绝对不能超过硬限制。你代码里把rlim_cur设为RLIM_INFINITY,明显超出了0的硬限制,所以setrlimit直接返回EINVAL错误。
  • 这种情况一般是系统管理员通过配置强制禁用了core文件生成,或者某些安全加固工具修改了全局限制。

解决办法

临时修复(当前会话有效)

  • 用root权限执行命令放开core文件的硬限制:
    ulimit -Hc unlimited
    
    重启第三方产品进程后,再跑代码时getrlimit拿到的rlim_max就会变成无限大,设置RLIM_INFINITY就能成功。

永久生效(重启系统后依然有效)

  • 编辑/etc/security/limits.conf,添加或修改这两行:
    *                hard    core            unlimited
    *                soft    core            unlimited
    
    保存后,新登录的会话会自动应用这个配置,现有进程需要重启才能生效。

代码兼容(无法改系统配置时用)

  • 在代码里加个判断,先检查硬限制是否为0,要是为0就别强行设置无限大了:
    rlimit Limit;
    if (getrlimit(RLIMIT_CORE, &Limit) != 0)
    {
        return;
    }
    
    // 硬限制为0时不修改软限制
    if (Limit.rlim_max != 0) {
        Limit.rlim_cur = RLIM_INFINITY;
        setrlimit(RLIMIT_CORE, &Limit);
    }
    

内容的提问来源于stack exchange,提问作者0xBADF00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:10:33