linux - 查看核心转储何时完成

标签 linux bash coredump

我正在编写一个 bash 脚本,用于收集 CentOS 服务器上的各种诊断信息并将它们打包,以便将它们发送到我们公司进行分析。作为此脚本的一部分,我检查公司的应用程序是否响应。如果不是,我会触发应用程序进程的核心转储:

kill -6 $app_pid

此命令将导致为 pid $app_pid 写入进程核心转储。但是,我需要一种方法来等待核心转储生成完成。否则,由于核心转储不完整,我可能会创建损坏的诊断包。

我希望使用默认的 centos 软件包进行此检查,但如果必须的话,我也愿意安装其他软件包。

最佳答案

为您提供最大控制权的机制是在 /proc/sys/kernel/core_pattern 中指定管道。这将让您选择的程序在创建 coredump 时执行,因此该程序可以 100% 确定当(且仅当!)其标准输入文件描述符处于 EOF 条件时它具有完整转储。请参阅 man 5 core 中的“将核心转储传输到程序”部分.

如果您正在使用 systemd(如 CentOS 的现代版本),systemd-coredump 程序将已经以这种方式自行配置。 systemd-coredump 在压缩完成时从临时名称重命名文件,因此它已经完成了确保您只有一个完整的 coredump 准备好记录的工作。

因此,如果您有一个以以下形式命名的文件:

/var/lib/systemd/coredump/core.*.lz4

(或者通过您选择的压缩算法的扩展),您已经可以确信它是完整的,因为该文件是在 重命名为最终名称之前编写并设置了权限的.

关于linux - 查看核心转储何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288871/

相关文章:

c++ - 这段代码不是线程安全的,不是吗?

MySQL 突然停止 LAMP 堆栈

linux - 如何在 linux 中传递带引号但带有空格的参数

regex - 如何在 sed Replace 命令中传递可变行号

mysql - 如何将命令输出附加到 MariaDB 数据库?

embedded-linux - 无法核心转储 - 嵌入式Linux

崩溃程序不生成核心转储

linux - 在 Bash 中仅从 JSON 文件中提取一些键

linux - 通过 FIFO QUEUE 执行脚本

C 程序中的核心转储