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

Ubuntu18.04与20.04修改配置后仍无法找到core-dump文件怎么办

Ubuntu 18.04/20.04 不生成core dump文件的原因及解决方案

常见故障原因

  • ulimit配置仅对当前shell会话生效
    你当前执行的ulimit -c unlimited仅在当前打开的终端窗口生效,如果你在其他终端运行崩溃程序、或者程序是通过图形界面/系统服务启动,该配置不会生效。
  • /var/crash目录无普通用户写入权限
    默认/var/crash目录属主为root,权限仅允许root用户写入,如果你用普通用户身份运行触发段错误的程序,无法在该目录下创建core文件。
  • Apport服务未完全禁用,覆盖core_pattern配置
    Ubuntu默认的崩溃上报服务Apport会自动修改/proc/sys/kernel/core_pattern,即便你手动修改过,如果Apport服务还在运行,可能会自动恢复原有配置,或者拦截崩溃事件不生成core文件。
  • core_pattern修改为临时生效,重启后失效
    通过echo直接写入/proc的配置仅临时生效,系统重启后会恢复默认值。
  • 特殊程序限制
    如果你的程序是SUID/SGID程序、或者程序内部主动调用setrlimit将core文件大小限制为0,也不会生成core dump。

对应解决步骤

  1. 永久配置ulimit core文件大小限制
    编辑/etc/security/limits.conf,在末尾添加以下内容:
* soft core unlimited

保存退出后重新登录系统,配置全局生效。如果是systemd管理的服务,还需要在对应service配置的[Service]段添加LimitCORE=infinity,再重载systemd配置。
2. 修正core dump存储路径权限/更换路径
方案一:给/var/crash目录开放写入权限

sudo chmod 777 /var/crash

方案二:更换为普通用户有权限的存储路径,比如:

sudo su
echo "/home/你的用户名/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

注意提前手动创建/home/你的用户名/corefiles目录。
3. 禁用Apport服务

sudo systemctl stop apport
sudo systemctl disable apport

执行完成后再次确认core_pattern配置是否符合预期:

cat /proc/sys/kernel/core_pattern
  1. 永久保存core_pattern配置
    编辑/etc/sysctl.conf,在末尾添加:
kernel.core_pattern = /var/crash/core-%e-%p-%t

保存后执行sudo sysctl -p立即生效,重启后配置也不会丢失。
5. 验证配置是否生效
编写极简测试程序验证:

// test.c
int main() {
    // 主动触发段错误
    *(int *)0 = 0;
    return 0;
}

编译运行:

gcc test.c -o test
./test

如果终端输出Segmentation fault (core dumped),说明配置正常,到你配置的存储路径下就能找到对应core文件。
如果运行的是SUID/SGID程序,还需要执行以下配置:

sudo su
echo 2 > /proc/sys/fs/suid_dumpable

要永久生效的话在/etc/sysctl.conf添加fs.suid_dumpable = 2,再执行sudo sysctl -p。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:05