在 Linux 系统中,core dump 文件的生成路径和文件名可以通过几个方面来控制:
- 系统默认路径:
- 默认情况下,core dump 文件通常生成在程序的工作目录,即程序运行时的当前目录。
- 文件名通常为
core
,或者在某些系统上可能包含进程 ID,如core.PID
,其中 PID 是产生 core dump 的进程的进程 ID。
/proc/sys/kernel/core_pattern
:- Linux 系统提供了一个内核参数
core_pattern
,它决定了 core dump 文件的位置和命名方式。 - 可以通过编辑
/proc/sys/kernel/core_pattern
文件来设置 core dump 的路径和命名规则。例如,可以将 core dump 存储在/var/coredumps/
目录下,并按照进程名和 PID 命名,如下所示:
这将导致 core dump 文件以echo "/var/coredumps/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
core-<命令名>-<PID>-<时间戳>
的格式存储在/var/coredumps/
目录下。
- Linux 系统提供了一个内核参数
ulimit
命令:- 使用
ulimit
命令可以控制 core dump 文件的大小限制。例如,设置无限制的 core dump 大小可以使用:ulimit -c unlimited
- 如果将 core dump 大小限制为 0,则系统不会生成 core dump 文件。
- 使用
systemd
配置:- 如果你的系统使用
systemd
作为初始化系统,你还可以在systemd
的配置文件中设置 core dump 的行为。
- 如果你的系统使用
- 环境变量:
- 环境变量
CORE_PATTERN
也可以用来控制 core dump 文件的路径和命名。
请注意,要生成 core dump 文件,你的系统必须允许生成 core dump,并且用户必须有权限在指定的目录下写入文件。此外,某些安全设置或系统限制可能会阻止 core dump 文件的生成。
- 环境变量
附加ulimit的用法
ulimit
是一个在类 UNIX 系统中用于设置或报告用户资源限制的命令。其中,-c
选项用于控制核心转储(core dump)文件的大小限制。
ulimit -c 的用法:
- 查看当前 core dump 文件大小限制:
ulimit -c
- 设置 core dump 文件大小限制为无限制(unlimited):
ulimit -c unlimited
- 设置 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 文件的大小限制和生成情况。
- 编译程序:
gcc -g -o div_zero div_zero.c
- 查看当前 core dump 文件大小限制:
ulimit -c
- 设置 core dump 文件大小限制为无限制:
ulimit -c unlimited
- 运行程序(这将导致除以零的错误并生成 core dump 文件):
./div_zero
- 检查 core dump 文件是否生成:
ls core.*
请注意,ulimit
设置的更改通常只影响当前会话。如果你希望永久更改 core dump 文件大小限制,你可能需要编辑 shell 的配置文件(如 .bashrc
或 .bash_profile
)或系统范围的配置文件(如 /etc/security/limits.conf
)。