当前位置: 首页 > 文档资料 > systemd 中文手册 >

coredumpctl 中文手册

优质
小牛编辑
141浏览
2023-12-01

名称

coredumpctl — 提取与处理已保存的内存转储数据

大纲

coredumpctl [OPTIONS...] {COMMAND} [PID|COMM|EXE|MATCH...]

描述

coredumpctl工具用于提取与处理先前由systemd-coredump(8) 保存的内存转储数据(内存镜像以及元数据)

选项(OPTIONS)

可以识别的选项如下:

-h, --help

显示简短的帮助信息并退出。

--version

显示简短的版本信息并退出。

--no-legend

不输出列标题,也就是不在输出列表的头部和尾部显示字段的名称。

--no-pager

不将程序的输出内容管道(pipe)给分页程序。

-1

仅显示单独一个内存转储的信息,而不是列出全部已知的内存转储。

-S, --since

仅显示指定时刻之后发生的内存转储。

-U, --until

仅显示指定时刻之前发生的内存转储。

-r, --reverse

翻转输出顺序,也就是首先显示最近发生的内存转储。

-F FIELD, --field=FIELD

显示在日志中匹配到的全部内存转储的指定字段的所有可能值。[译者注]类似于SQL语句: "SELECT DISTINCT 指定字段 FROM 在日志中匹配到的全部内存转储"

-o FILE, --output=FILE

将内存镜像保存到指定的 FILE 文件中。

--debugger=DEBUGGER

debug 命令指定调试器。如果没有指定此选项,并且也没有设置 $SYSTEMD_DEBUGGER 环境变量,那么将会使用默认的 gdb(1) 调试器。

-D DIR, --directory=DIR

仅使用指定的 DIR 目录中的日志。

-q, --quiet

安静模式,也就是不显示任何例如无权访问日志文件、内存转储正在保存中之类的警告信息与提示信息。

命令(COMMAND)

可以识别的命令如下:

list

列出日志中所有符合指定特征的内存转储。如果没有明确使用任何命令,那么该命令就是隐含的默认命令。

此命令会输出一个便于人类阅读的列表,列表中将包含以下字段:

TIME

内核报告的发生崩溃的时刻

PID

崩溃进程的进程标识符

UID, GID

崩溃进程的身份标识符(属主与属组)

SIGNAL

导致进程崩溃的信号(若可用)

COREFILE

内核转储是否已经被保存、以及是否仍然可以访问: "none" 表示未被保存; "-" 表示不可用(例如因为进程不是被某个信号结束); "present" 表示已被保存在外部文件中并且可以被当前用户访问; "journal" 表示已被保存在日志中并且可以被当前用户访问; "truncated" 表示因为内存转储的体积太大,已被截断保存,并且可以被当前用户访问; "error" 表示无法访问先前已保存的内存转储(通常是因为没有权限); "missing" 表示 先前保存的外部文件已经被删除;

EXE

可执行文件的完整路径。 对于脚本来说则是解释器的完整路径。

需要特别提醒的是,保存在日志中的元数据与保存在外部文件中的内存镜像(位于 /var/lib/systemd/coredump/ 目录中)所受到的限制是完全不同的(详见 systemd-coredump(8) 手册)。所以,经常会出现这样的情况: 在日志中仍然存在的内存转储事件所对应的保存内存镜像的外部文件 已经被删除。

info

显示从日志中提取的、与指定的特征匹配的那些内存转储的详细信息。若未指定匹配特征,则显示最近一次内存转储的详细信息。

dump

提取与指定的特征匹配的最近一次内存转储数据(内存镜像)。若未指定匹配特征,则匹配最近一次内存转储。因为二进制数据不适合直接显示,所以务必将此命令的输出重定向到一个文件中,或者配合 --output= 选项一起使用。

debug

调用调试器来分析与指定的特征匹配的最近一次内存转储。若未指定匹配特征,则匹配最近一次内存转储。默认使用 gdb(1) 调试器,但是也可以使用 --debugger= 选项或者 $SYSTEMD_DEBUGGER 环境变量 来指定其他调试器。

匹配特征(PID|COMM|EXE|MATCH)

可以识别的特征如下:

PID

一个正整数,表示 发生内核转储的进程的"PID"。

COMM

可执行程序的文件名(用于匹配 COREDUMP_COMM= 字段),必须不能包含路径分隔符(斜杠)。

EXE

可执行程序的路径(用于匹配 COREDUMP_EXE= 字段),必须包含至少一个路径分隔符(正斜杠)。

MATCH

常规的日志过滤器(必须符合"FIELD=VALUE"格式)。详见 journalctl(1) 手册。

退出状态

返回值为 0 表示成功,非零返回值表示失败代码。注意,没有找到任何匹配的内存转储视为失败。

环境变量

$SYSTEMD_DEBUGGER

debug 命令指定调试器。参见 --debugger= 选项。

例子

例 1. 列出所有文件名为 foo 的可执行程序的内存转储:

# coredumpctl list foo

例 2. 为最近一次内存转储调用 gdb 调试器:

# coredumpctl debug

例 3. 显示所有 PID=6654 的进程所产生的内存转储的详细信息:

# coredumpctl info 6654

例 4. 提取 /usr/bin/bar 的最近一次内存转储数据(内存镜像),并将其保存在bar.coredump 文件中:

# coredumpctl -o bar.coredump dump /usr/bin/bar

参见

systemd-coredump(8),coredump.conf(5),systemd-journald.service(8),gdb(1)