跳过导航链接 | |
退出打印视图 | |
![]() |
解决 Oracle Solaris 11.1 中的典型问题 Oracle Solaris 11.1 Information Library (简体中文) |
核心文件是在异常终止进程或应用程序时生成的。使用 coreadm 命令可以管理核心文件。例如,可以使用 coreadm 命令来配置系统,以便将所有进程核心文件都放在一个系统目录中。这意味着,当进程或守护进程异常终止时,可通过检查特定目录中的核心文件来跟踪问题。
以下两个可配置的 core 文件路径可以独立于彼此启用或禁用:
每进程核心文件路径,缺省为 core,缺省情况下处于启用状态。如果启用,则每进程核心文件路径会导致在进程异常终止时生成 core 文件。每进程路径由新进程从其父进程处继承。
生成每进程核心文件时,该文件由具有所有者读/写权限的进程所有者所有。只有所有者用户可以查看此文件。
全局核心文件路径,缺省为 core,缺省情况下处于禁用状态。如果启用,则会使用全局核心文件路径生成内容与每进程核心文件相同的附加核心文件。
全局核心文件在生成时归 root 用户所有,只有 root 用户具有读/写权限。非特权用户不能查看此文件。
当进程异常终止时,缺省情况下会在当前目录中生成一个核心文件。如果启用了全局核心文件,则每个异常终止的进程可能会生成两个文件,一个在当前工作目录中,另一个在全局核心文件位置。
缺省情况下,setuid 进程不使用全局或每进程路径生成核心文件。
如果启用了全局 core 文件目录,则可以使用下表中介绍的变量来区分各个 core 文件。
|
例如,如果全局核心文件路径设置为:
/var/core/core.%f.%p
并且 PID 为 12345 的 sendmail 进程异常终止,则会生成以下 core 文件:
/var/core/core.sendmail.12345
可以按全局、区域或进程设置核心文件名称模式。此外,可以设置在系统重新引导后保持不变的每进程缺省值。
例如,以下 coreadm 命令将设置缺省的每进程核心文件模式。此设置适用于未显式覆盖缺省核心文件模式的所有进程。此设置在系统重新引导后继续存在。例如,以下 coreadm 命令为 init 进程启动的所有进程设置全局核心文件模式。此模式在系统重新引导后继续存在。
# coreadm -i /var/core/core.%f.%p
以下 coreadm 命令可为任何进程设置每进程核心文件名称模式:
# coreadm -p /var/core/core.%f.%p $$
$$ 符号表示当前正在运行的 Shell 的进程 ID 的占位符。所有子进程都会继承每进程核心文件名称模式。
设置全局或每进程核心文件名称模式之后,必须使用 coreadm -e 命令启用该名称模式。有关更多信息,请参见以下过程。
通过将该命令放入用户的初始化文件(如 .profile)中,可以为用户登录会话期间运行的所有进程设置核心文件名称模式。
可以使用 coreadm 命令启用或禁用 setuid 程序,以便通过设置以下路径来为所有系统进程或每个进程生成核心文件:
如果启用了全局 setuid 选项,则全局核心文件路径允许系统中的所有 setuid 程序生成 core 文件。
如果启用了每进程 setuid 选项,每进程核心文件路径将允许特定 setuid 进程生成 core 文件。
缺省情况下,这两个标志都被禁用。由于安全原因,全局核心文件路径必须为全路径名,以斜杠 / 开头。如果 root 用户禁用了每进程核心文件,个人用户将无法获取核心文件。
setuid 核心文件归 root 用户所有,只有 root 用户具有读/写权限。一般用户无法访问这些文件,即使生成 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 -e process
# coreadm $$ 1180: /home/kryten/corefiles/%f.%p
# 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