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

Linux系统下应用崩溃生成core dump的内部机制是什么

Linux Core Dump 相关问题解答

1. 应用程序的终止状态由谁负责追踪?

  • Linux 内核负责全量追踪系统内所有进程的运行状态,自然也包含终止状态。进程触发终止逻辑时(无论是正常退出、被信号中断终止),内核会将终止原因、退出码、是否生成 core dump 等信息写入进程对应的任务结构体中,父进程可以通过wait()、waitpid()等系统调用读取子进程的终止状态详情。

2. core dump 文件由谁生成?

  • core dump 文件由Linux 内核直接生成,不属于用户态工具的默认能力范畴。只有当进程接收到默认行为为生成 core dump 的信号时(比如段错误触发的SIGSEGV、断言失败触发的SIGABRT、算术异常触发的SIGFPE等),内核才会启动 core dump 生成逻辑,将进程的地址空间数据、寄存器状态、运行时上下文等信息持久化到存储中。

3. core dump 的具体生成流程是怎样的?能否手动触发生成core dump?

生成流程:

  • 第一步:进程收到触发 core dump 的信号后,内核首先校验该进程的 core 资源限制(即ulimit -c的配置值),如果值为0,直接终止进程,跳过 core 生成逻辑。
  • 第二步:内核进一步校验进程权限、PR_SET_DUMPABLE标志位状态,如果是特权进程、或者标志位关闭,同样不生成 core 文件。
  • 第三步:内核读取/proc/sys/kernel/core_pattern配置的文件命名和存储规则,创建 core 文件,按规则依次写入进程的虚拟内存内容、寄存器状态、信号上下文、打开的文件描述符信息等运行时数据。
  • 第四步:写入完成后内核正式终止进程,将终止状态标记为已生成 core dump,向父进程发送通知。

手动触发方式:

可以通过给运行中的进程发送触发 core dump 的信号手动生成,常用命令如下:

# 给指定PID的进程发送SIGABRT信号,默认会触发core dump生成
kill -SIGABRT <进程PID>
# 也可发送SIGQUIT信号,前台进程也可以通过快捷键Ctrl+\触发该信号
kill -SIGQUIT <进程PID>

触发前需要确认进程所属 shell 的ulimit -c配置为unlimited,且进程的PR_SET_DUMPABLE标志位处于开启状态。

4. 该过程内部需要依赖哪些软件包?

  • 原生 core dump 生成逻辑完全由内核实现,不需要额外安装任何用户态软件包。如果需要自定义 core dump 的存储、压缩、上报等扩展逻辑,才需要额外安装用户态辅助工具,比如systemd-coredump(systemd 系列发行版默认预装)、abrt(红帽系发行版常用的崩溃上报工具)等。
  • 后续分析 core dump 文件通常需要用到gdb调试工具包,该工具不属于 core dump 生成过程的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:05