当前位置: 首页 > news >正文

[coredump] 生成管理

在 Linux 系统中,core dump 文件的生成路径和文件名可以通过几个方面来控制:

  1. 系统默认路径
    • 默认情况下,core dump 文件通常生成在程序的工作目录,即程序运行时的当前目录。
    • 文件名通常为 core,或者在某些系统上可能包含进程 ID,如 core.PID,其中 PID 是产生 core dump 的进程的进程 ID。
  2. /proc/sys/kernel/core_pattern
    • Linux 系统提供了一个内核参数 core_pattern,它决定了 core dump 文件的位置和命名方式。
    • 可以通过编辑 /proc/sys/kernel/core_pattern 文件来设置 core dump 的路径和命名规则。例如,可以将 core dump 存储在 /var/coredumps/ 目录下,并按照进程名和 PID 命名,如下所示:
      echo "/var/coredumps/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
      
      这将导致 core dump 文件以 core-<命令名>-<PID>-<时间戳> 的格式存储在 /var/coredumps/ 目录下。
  3. ulimit 命令
    • 使用 ulimit 命令可以控制 core dump 文件的大小限制。例如,设置无限制的 core dump 大小可以使用:
      ulimit -c unlimited
      
    • 如果将 core dump 大小限制为 0,则系统不会生成 core dump 文件。
  4. systemd 配置
    • 如果你的系统使用 systemd 作为初始化系统,你还可以在 systemd 的配置文件中设置 core dump 的行为。
  5. 环境变量
    • 环境变量 CORE_PATTERN 也可以用来控制 core dump 文件的路径和命名。
      请注意,要生成 core dump 文件,你的系统必须允许生成 core dump,并且用户必须有权限在指定的目录下写入文件。此外,某些安全设置或系统限制可能会阻止 core dump 文件的生成。

附加ulimit的用法

ulimit 是一个在类 UNIX 系统中用于设置或报告用户资源限制的命令。其中,-c 选项用于控制核心转储(core dump)文件的大小限制。

ulimit -c 的用法:

  1. 查看当前 core dump 文件大小限制:
ulimit -c
  1. 设置 core dump 文件大小限制为无限制(unlimited):
ulimit -c unlimited
  1. 设置 core dump 文件大小限制为一个具体的值(例如,1024KB):
ulimit -c 1024

代码演示:

假设我们有一个简单的 C 程序 div_zero.c,它包含一个除以零的操作,这将导致程序异常终止并生成 core dump 文件。

#include <stdio.h>
int main() {int a = 10;int b = 0;int result = a / b; // 这里将产生除以零的错误printf("Result: %d\n", result);return 0;
}

编译并运行这个程序,然后检查 core dump 文件的大小限制和生成情况。

  1. 编译程序:
gcc -g -o div_zero div_zero.c
  1. 查看当前 core dump 文件大小限制:
ulimit -c
  1. 设置 core dump 文件大小限制为无限制:
ulimit -c unlimited
  1. 运行程序(这将导致除以零的错误并生成 core dump 文件):
./div_zero
  1. 检查 core dump 文件是否生成:
ls core.*

请注意,ulimit 设置的更改通常只影响当前会话。如果你希望永久更改 core dump 文件大小限制,你可能需要编辑 shell 的配置文件(如 .bashrc.bash_profile)或系统范围的配置文件(如 /etc/security/limits.conf)。

http://www.lryc.cn/news/515526.html

相关文章:

  • CSS——5. 外部样式
  • 检查字符是否相同
  • casaos安装最新版homeassistant-arm
  • openwrt host方式编译ffmpeg尝试及问题分析
  • 【three.js】搭建环境
  • SQLite AND/OR 运算符
  • 《普通逻辑》学习记录——命题的判定与自然推理
  • 道可云人工智能元宇宙每日资讯|崂山区政务服务虚拟大厅启用
  • 高并发写利器-组提交,我的Spring组件实战
  • 音视频入门基础:MPEG2-PS专题(4)——FFmpeg源码中,判断某文件是否为PS文件的实现
  • 如何使用OpenCV进行抓图-多线程
  • 电子应用设计方案86:智能 AI背景墙系统设计
  • 【《python爬虫入门教程11--重剑无峰168》】
  • .net core 线程锁,互斥锁,自旋锁,混合锁
  • 【DevOps】Jenkins项目发布
  • C# OpenCV机器视觉:霍夫变换
  • Kraft模式安装Kafka(含常规、容器两种安装方式)
  • Linux驱动开发(16):输入子系统–电容触摸驱动实验
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(24):椭圆曲线密码学
  • 现代光学基础5
  • 力扣hot100——贪心
  • vue3如何实现防抖?
  • 西安电子科技大学初/复试笔试、面试、机试成绩占比
  • spring mvc源码学习笔记之六
  • 树莓派4b如何连接ov7670摄像头
  • [微服务]分布式搜索Java客户端
  • 如何使用 `uiautomator2` 控制 Android 设备并模拟应用操作_VIVO手机
  • 在Ubuntu 18.04.6 LTS安装OpenFace流程
  • C 语言的整型提升问题
  • 第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议