Linux系统动态核心转储需综合检查ulimit、/proc/sys/kernel/core_pattern、systemd-coredump服务及suid_dumpable、core_uses_pid参数:ulimit -c为0则禁用;core_pattern含systemd-coredump路径时转储由其接管;systemctl is-active systemd-coredump需为active;suid_dumpable=2且core_uses_pid=1方可确保特权进程正常生成带PID后缀的core文件。

要确认Linux系统当前是否启用动态核心转储(core dump)以及具体生效的配置路径与命名规则,必须逐层检查内核参数、资源限制和systemd服务三类设置,缺一不可。直接查看单一配置项可能得到错误结论,因为它们之间存在覆盖关系。
检查ulimit核心文件大小限制
这决定了当前shell会话或进程能否生成core文件:执行 ulimit -c 查看输出值;若为 【0】,表示该会话下core dump被强制禁用,即使其他配置全开也无效。
若需验证是否对所有用户永久生效,运行 grep 'core' /etc/security/limits.conf;注意硬限制(hard)必须非零,软限制(soft)不能高于硬限制。
读取/proc/sys/kernel/core_pattern内核模式
执行 cat /proc/sys/kernel/core_pattern 获取当前生效的core文件命名与路径模板。
如果输出是 【|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e %c %h】,说明系统正使用 systemd-coredump 服务接管转储,此时实际文件不会出现在工作目录,而是存入 /var/lib/systemd/coredump/ 并经zstd压缩。
若输出为纯路径如 /tmp/core.%e.%p,则core文件将按此规则生成在对应位置;若输出仅为 core,说明未自定义路径,文件将生成在进程崩溃时的工作目录,极易被覆盖或遗漏。
确认systemd-coredump服务状态
在采用systemd的发行版中(如Ubuntu 22.04+、CentOS 8+、Debian 11+),该服务默认启用并优先于传统core_pattern路径配置。
第一步:运行 systemctl is-active systemd-coredump;输出 【active】 表示服务正在运行。
第二步:执行 coredumpctl list;若能列出历史core文件条目,证明系统确实在捕获并存储转储数据。
第三步:检查是否禁用了服务——运行 systemctl is-enabled systemd-coredump;若输出 【disabled】,则需手动启用:sudo systemctl enable --now systemd-coredump。
验证suid_dumpable与core_uses_pid参数
这两个参数影响特权程序是否生成转储:执行 cat /proc/sys/kernel/suid_dumpable;输出为 【2】 表示允许setuid程序生成core(推荐值),输出为0则完全禁止。
执行 cat /proc/sys/kernel/core_uses_pid;输出为1表示所有core文件名自动附加PID后缀,避免多进程崩溃时相互覆盖。
这两项若为0,会导致root权限程序或sudo运行的程序崩溃时不生成任何core文件,且无报错提示,是最隐蔽的失效原因。


















