核心转储文件是在异常终止进程或应用程序时生成的。使用 coreadm 命令可以管理核心转储文件。
例如,可以使用 coreadm 命令来配置系统,以便将所有进程核心转储文件都放在一个系统目录中。这意味着,当进程或守护进程异常终止时,可通过检查特定目录中的核心转储文件来跟踪问题。
可以独立启用或禁用的两个新的可配置 core 文件路径是:
每进程核心转储文件路径,缺省为 core 并在缺省情况下启用。如果启用,则每进程核心转储文件路径会导致在进程异常终止时生成 core 文件。每进程路径由新进程从其父进程处继承。
生成每进程核心转储文件时,该文件由具有属主读/写权限的进程属主拥有。只有属主用户可以查看此文件。
全局核心转储文件路径,缺省为 core 并在缺省情况下禁用。如果启用,则会使用全局核心转储文件路径生成内容与每进程核心转储文件相同的附加核心转储文件。
生成全局核心转储文件时,该文件只属于具有超级用户读/写权限的超级用户所有。非特权用户不能查看此文件。
当进程异常终止时,缺省情况下会在当前目录中生成一个核心转储文件。如果启用了全局核心转储文件,则每个异常终止的进程可能会生成两个文件,一个在当前工作目录中,另一个在全局核心转储文件位置。
缺省情况下,setuid 进程不使用全局或每进程路径生成核心转储文件。
如果启用了全局核心转储文件目录,则可使用下表中介绍的变量来区分 core 文件。
变量名 |
变量定义 |
---|---|
%d |
可执行文件目录名,最多包含 MAXPATHLEN 个字符 |
%f |
可执行文件名,最多包含 MAXCOMLEN 个字符 |
%g |
有效组 ID |
%m |
机器名 (uname -m) |
%n |
系统节点名 (uname -n) |
%p |
进程 ID |
%t |
时间的十进制值 (2) |
%u |
有效用户 ID |
%z |
在其中执行进程的区域的名称 (zonename) |
%% |
字面值 % |
例如,如果全局核心转储文件路径设置为:
/var/core/core.%f.%p
并且 PID 为 12345 的 sendmail 进程异常终止,则会生成以下 core 文件:
/var/core/core.sendmail.12345
可以按全局、区域或进程设置核心转储文件名称模式。此外,还可以设置在系统重新引导时持续存在的每进程缺省值。
例如,以下 coreadm 命令将设置缺省的每进程核心转储文件模式。此设置适用于未显式覆盖缺省核心转储文件模式的所有进程。此设置在系统重新引导后继续存在。
# coreadm -i /var/core/core.%f.%p |
以下 coreadm 命令可为任何进程设置每进程核心转储文件名称模式:
$ coreadm -p /var/core/core.%f.%p $$ |
$$ 符号表示当前正在运行的 Shell 的进程 ID 的占位符。所有子进程都会继承每进程核心转储文件名称模式。
一旦设置了全局或每进程核心转储文件模式,就必须使用 coreadm -e 命令启用该模式。有关更多信息,请参见以下过程。
通过在 $HOME/.profile 或 .login 文件中放置该命令,便可为用户登录会话期间运行的所有进程设置核心转储文件名称模式。
可以使用 coreadm 命令启用或禁用 setuid 程序,以便通过设置以下路径来为所有系统进程或每个进程生成核心转储文件:
如果启用了全局 setuid 选项,则全局核心转储文件路径允许系统中的所有 setuid 程序生成 core 文件。
如果启用了每进程 setuid 选项,则每进程核心转储文件路径只允许特定 setuid 进程生成 core 文件。
缺省情况下,这两个标志都被禁用。由于安全原因,全局核心转储文件路径必须为全路径名,以斜杠 / 开头。如果超级用户禁用每进程核心转储文件,则各个用户都无法获取核心转储文件。
setuid 核心转储文件只属于具有超级用户读/写权限的超级用户所有。即使生成 setuid 核心转储文件的进程属于普通用户所有,常规用户也不能访问这些文件。
有关更多信息,请参见 coreadm(1M) 手册页。
使用不带任何选项的 coreadm 命令可以显示当前的核心转储配置。
$ coreadm global core file pattern: global core file content: default init core file pattern: core init core file content: default global core dumps: disabled per-process core dumps: enabled global setid core dumps: disabled per-process setid core dumps: disabled global core dump logging: disabled |
确定要设置每进程核心转储文件还是全局核心转储文件,并选择下列项之一:
设置每进程文件名称模式。
$ coreadm -p $HOME/corefiles/%f.%p $$ |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
设置全局文件名称模式。
# coreadm -g /var/corefiles/%f.%p |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
启用每进程核心转储文件路径。
# coreadm -e process |
显示当前的进程核心转储文件路径,以验证配置。
$ coreadm $$ 1180: /home/kryten/corefiles/%f.%p |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
启用全局核心转储文件路径。
# coreadm -e global -g /var/core/core.%f.%p |
显示当前的进程核心转储文件路径,以验证配置。
# coreadm global core file pattern: /var/core/core.%f.%p global core file content: default init core file pattern: core init core file content: default global core dumps: enabled per-process core dumps: enabled global setid core dumps: disabled per-process setid core dumps: disabled global core dump logging: disabled |