探索Linux Core Dump:使用C程序和Sleep命令生成

在Linux系统中,我们可以通过C程序或sleep命令来生成core dump。

  1. 使用C程序生成core dump:我们可以编写一个简单的C程序,使其发生段错误(segmentation fault),从而生成core dump。这通常涉及到尝试访问一个空指针或未分配的内存。编译并运行这个程序后,它会崩溃并生成一个core dump。
  2. 使用sleep命令生成core dump :我们可以启动一个sleep进程,并使用kill命令向其发送SIGSEGV信号。这将导致进程崩溃并生成core dump。这种方法的优点是不需要编写任何代码,但可能不适用于所有进程,因为一些进程可能有机制来捕获和处理SIGSEGV信号。

在生成core dump之前,需要确保系统已经启用了core dump。这通常可以通过ulimit -c unlimited命令来实现。下面详细的来介绍一下这两种方法。

使用C 程序生成Core dump

要在 Linux 中测试core dump功能,你可以创建一个会崩溃的简单程序,然后检查是否生成了core dump文件。以下是一个使用 C 语言的例子:

  1. 创建一个会导致段错误(segmentation fault)的简单 C 程序。例如:

#include <stdio.h>

int main() {

int *ptr = NULL;

printf("%d\n", *ptr);

return 0;

}

将此代码保存在名为 crash.c 的文件中。

  1. 编译程序:

gcc -g -o crash crash.c

-g 选项包含调试信息,这在分析核core dump时会很有用。

  1. 启用core dump:

ulimit -c unlimited

此命令将创建的核心文件的最大大小设置为无限制。默认情况下,可能禁用了core dump,此命令将启用它们。

  1. 运行程序:

./crash

这将导致段错误并创建core dump。core dump文件的名称将取决于你的核心模式。

  1. 你现在应该在当前目录中有一个core dump文件。你可以使用以下命令进行检查:

ls core*

这将列出所有以 core 开头的文件。

  1. 现在,你可以使用像 gdb 这样的调试器来分析core dump:

gdb ./crash core

core 替换为你的core dump文件的实际名称。这将启动 gdb 并加core dump储。从这里开始,你可以使用各种 gdb 命令来分析core dump。

使用sleep来生成core dump

在 linux中生成core dump,你可以使用 kill 命令向正在运行的进程发送 SIGSEGV 信号。如果启用了core dump,此信号将导致进程崩溃并生成core dump。

以下是一个简单的例子:

首先,启动一个在后台运行的进程。例如,你可以启动一个 sleep 进程: 这将启动一个在后台运行 10000 秒的 sleep 进程。

sleep 10000 &

找到进程的进程 ID (PID)。你可以使用 ps 命令来做这个:

ps -e | grep sleep

这将输出一行类似于以下的内容:

12345 pts/0 00:00:00 sleep

在这个例子中,PID 是 12345。

向进程发送 SIGSEGV 信号: 将 12345 替换为你的进程的实际 PID。

kill -SIGSEGV 12345

这将导致进程崩溃并生成core dump。

请注意,这只是一个简单的例子,可能不适用于所有进程。一些进程有捕获和处理 SIGSEGV 信号的机制,当它们收到此信号时,可能不会崩溃或生成core dump。

相关推荐
枳实-叶6 分钟前
【Linux驱动开发】第5天:字符设备驱动核心原理:主次设备号+cdev+数据拷贝全解
linux·运维·驱动开发
南境十里·墨染春水15 分钟前
linux 学习进展 网络编程 ——HTTP 协议详解
linux·网络·学习
深邃-18 分钟前
【Web安全】-云服务器与Docker(2):Docker镜像操作,Docker容器操作,Docker搭建漏洞靶场
linux·服务器·web安全·网络安全·docker
慢慢向上的蜗牛18 分钟前
Atlas300I推理卡驱动适配Linux 6.12+内核
linux·c++·人工智能·华为·驱动·底层开发·ascend
霸时斌子31 分钟前
/etc/fstab 重复挂载条目
linux·安全
流浪00134 分钟前
Linux基础篇 (一) 不费力掌握入门级命令
linux·运维·服务器
楼田莉子38 分钟前
仿Muduo的高并发服务器:基于Tcp协议的回显服务器
linux·服务器·c++·后端
承渊政道42 分钟前
CentOS 7部署Elasticsearch完整流程:避坑、基础操作、远程访问
java·linux·elasticsearch·系统架构·centos·远程工作·持续部署
zzzyyy5381 小时前
Ext系列文件系统
linux·运维
Yupureki1 小时前
《MySQL数据库基础》6.表的增删查改
linux·服务器·数据库·mysql