当前位置:首页 > 文章列表 > 文章 > linux > coredumpctl 怎样按 PID 导出转储

coredumpctl 怎样按 PID 导出转储

来源:17golang原创 2026-10-25 14:24:01 0浏览 收藏

已知崩溃 PID 时,可以使用 coredumpctl --output=目标文件 dump PID 导出已保存的 core。先用 list 或 info 确认匹配的是目标崩溃;同一 PID 可能对应多条历史记录,dump 取的是符合条件的最后一份转储,不是当前同号进程的内存。

官方地址:https://www.freedesktop.org/software/systemd/man/latest/coredumpctl.html。采集与存储说明:https://www.freedesktop.org/software/systemd/man/latest/systemd-coredump.html。以下命令使用虚构 PID 和演示路径,未在本机执行,也没有制造真实崩溃。

问题:知道崩溃 PID,怎样拿到 core 文件

问题中的 PID 应来自那次崩溃记录,例如事故日志写明 worker 的崩溃进程号是 24680。这里假定主机已经由 systemd-coredump 保存相关数据。coredumpctl 的职责是检索已有记录和转储,不能凭一个数字从过去重新生成已经丢失的内存内容。

因此“导出失败”要拆成两类:选错记录,或者记录存在但 core 数据不可访问。反复更换输出扩展名不会解决后一类问题。

结论:dump 配合明确的输出文件

# 24680 只是示例,应替换为崩溃进程当时的 PID。
sudo coredumpctl --output=./worker-24680.core dump 24680

dump 是取出转储数据的动作,--output 指定写入位置;文件名由你决定,.core 只是便于辨认。sudo 用于有授权且需要读取系统记录的场景,当前用户有权限时可以直接执行。输出文件的目录应由你控制,并预留足够空间。

不指定输出文件时,dump 默认把二进制转储写到标准输出。这与 info 的可读说明不同,不适合当作普通终端文本查看,也不应混进应用日志。

图1:筛选对象、dump 动作和输出文件之间的静态关系
图1:筛选对象、dump 动作和输出文件之间的静态关系。静态结构说明图,不是操作截图或转储内容。

误区:PID 不是长期唯一标识

PID 会重用,跨重启或长期运行的机器上,单靠进程号并不能长期标识一次事故。先看匹配条目的时间和可执行路径,必要时加入时间窗口与其他 journal 字段。不要把“取最新匹配项”误解成“取我心里那次崩溃”。

# 先查看这个崩溃 PID 的匹配条目,不主动制造进程崩溃。
sudo coredumpctl --no-pager list 24680
# 查看详细元数据,确认时间、程序路径与所属启动批次。
sudo coredumpctl --no-pager info 24680

info 中的程序路径、时间和 Boot ID 有助于确认上下文。对于脚本程序,可执行文件可能显示为解释器,因此仅靠 EXE 也未必足够;筛选范围仍应贴合那次记录。

正确做法:筛选同一次崩溃再导出

下面使用时间窗口、COREDUMP_PID 和 COREDUMP_EXE 缩小范围。先列出范围内的条目,确认只剩目标事故;如果仍有多条,继续细化条件。不要只给 list 加条件,真正 dump 时又退回只传 PID。

# 日期、时间窗口、PID 和程序路径均需替换为实际崩溃信息。
sudo coredumpctl --no-pager --since="2026-10-24 09:10:00" --until="2026-10-24 09:20:00" list COREDUMP_PID=24680 COREDUMP_EXE=/opt/demo/bin/worker
# 使用完全相同的筛选条件读取元数据。
sudo coredumpctl --no-pager --since="2026-10-24 09:10:00" --until="2026-10-24 09:20:00" info COREDUMP_PID=24680 COREDUMP_EXE=/opt/demo/bin/worker
# 确认目标后,显式输出到文件,避免二进制内容进入终端。
sudo coredumpctl --since="2026-10-24 09:10:00" --until="2026-10-24 09:20:00" --output=./worker-24680-incident.core dump COREDUMP_PID=24680 COREDUMP_EXE=/opt/demo/bin/worker

时间字符串按主机工具的时间解析规则解释,请使用与事故记录一致的时区背景。程序路径必须取自真实记录,不要照抄 /opt/demo/bin/worker。这里列出的命令只负责示范参数组合,没有伪造匹配条目或导出成功输出。

图2:崩溃元数据、保存的 core 与导出文件的对象边界
图2:崩溃元数据、保存的 core 与导出文件的对象边界。静态结构说明图,不是操作截图或转储内容。

边界情况:有日志但转储不可取

COREFILE 状态处理思路
present 或 journal存在可取的数据来源,仍需关注实际权限与命令结果
missing日志记录仍在,但原外部文件已移除
none 或 -没有可用于此次导出的已保存 core
error检查当前访问权限与存储可达性
truncated数据没有完整保存,不能按完整内存镜像理解

journal 元数据与外部 core 文件的清理相互独立,所以 list 仍有一行,并不保证转储字节还在。导出工具无法补回已删除或未保存的数据;需要保留的事故材料,应在现有运维流程允许的保留期内处理。

若完全没有条目,应回到主机的采集配置与记录范围查原因,而不是凭 PID 盲目重试。本文只讨论已有转储的检索和导出,不展开更改内核采集配置或主动触发崩溃。

延伸问题与导出记录

# 导出后,配套保存同一筛选范围的元数据说明。
sudo coredumpctl --no-pager --since="2026-10-24 09:10:00" --until="2026-10-24 09:20:00" info COREDUMP_PID=24680 COREDUMP_EXE=/opt/demo/bin/worker > ./worker-24680-incident.info.txt
# 查看文件属性;sudo 导出的所有者与读权限需按调试安排管理。
ls -lh ./worker-24680-incident.core ./worker-24680-incident.info.txt

与 core 一起保留匹配元数据、程序构建版本和相应调试符号,能让后续分析更容易定位正确二进制。转储可能含进程内存中的业务数据,交接时按团队的事故资料权限管理即可,不要把它当作可随意公开的普通示例文件。

dump 24680 是导出当前进程吗?

不是,它在已有崩溃记录中匹配这个崩溃 PID。要获取一个仍在运行进程的状态属于另一个操作,不能混用这个含义。

info 保存成文本等于 core 吗?

不等于。info 是元数据与可用说明,dump 才是本题需要的二进制转储。两者应该使用不同文件名保存,避免交付时混淆。

想直接进入调试器,还需要导出吗?

coredumpctl 另有 debug 动作。是否先导出取决于调试位置和事故材料交接需求;本题强调拿到独立文件,因此采用 dump。

权限提升后还是 missing 怎么办?

missing 表达的是对应外部数据已不在,权限提升不能恢复被清理的文件。应查看是否另有已授权的事故备份,并避免把不同记录的 core 混作目标材料。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
systemd.service notify 怎样处理 READY=1systemd.service notify 怎样处理 READY=1
上一篇
systemd.service notify 怎样处理 READY=1
调用 scrollTo 后为什么没有触发 scrollend
下一篇
调用 scrollTo 后为什么没有触发 scrollend
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    686次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    701次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    757次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    719次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    557次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码