首页 > 解决方案 > 当我使用 [Cntrl + \] 退出正在运行的命令时,我在哪里可以找到 Linux 中的核心转储文件?

问题描述

Cntrl + \ 当我用它退出运行命令时\Quit (core dumped),它可能会创建一个包含程序内存映像的核心文件。但是我在哪里可以找到那个文件?

标签: linuxunixlinux-kernel

解决方案


当一个进程转储核心时/proc/sys/kernel/core_pattern,从这个 stackoverflow question执行配置的进程。

如果你的 init 进程是 systemd,你应该找到这样的/proc/sys/kernel/core_pattern文件内容:

|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

systemd-coredump我们可以读到:

默认情况下,systemd-coredump 将在可能的情况下将包含回溯的核心转储记录到日志中,并将核心转储本身存储在 /var/lib/systemd/coredump 中的外部文件中。

/var/lib/systemd/coredump默认情况下,核心转储应该可以在您的系统日志和目录中访问。

在我的系统上发送SIGQUIT信号后的 coredump 示例:sleep infinity

$ journalctl COREDUMP_SIGNAL_NAME=SIGQUIT
-- Logs begin at Sun 2019-05-19 10:51:52 CEST, end at Sun 2019-09-01 18:14:43 CEST. --
wrz 01 18:03:32 chors systemd-coredump[24169]: Process 24167 (sleep) of user 1000 dumped core.

                                               Stack trace of thread 24167:
                                               #0  0x00007fd96c53c338 __nanosleep (libc.so.6)
                                               #1  0x000055fb279394a5 n/a (sleep)
                                               #2  0x000055fb279392a1 n/a (sleep)
                                               #3  0x000055fb27936221 n/a (sleep)
                                               #4  0x00007fd96c499ee3 __libc_start_main (libc.so.6)
                                               #5  0x000055fb279362fe n/a (sleep)

对 journalctl 使用不同的输出选项时,可以获得更多输出。


推荐阅读