Solaris 模块调试器指南

文件、进程和线程

本节介绍用于对 Solaris 内核中各种基础文件、进程和线程结构进行格式设置和检查的 dcmd 和 walker。

dcmd

process ::fd fd-num

列显对应于与指定进程关联的文件描述符 fd-numfile_t 地址。 进程是使用其 proc_t 结构的虚拟地址指定的。

thread ::findstack [ command ]

列显与指定内核线程(通过其 kthread_t 结构的虚拟地址标识)关联的栈跟踪。 该 dcmd 使用几种不同的算法查找相应的栈反向跟踪。 如果指定了可选的命令字符串,则将点变量重置为最顶部栈帧的帧指针地址,并且计算指定的命令,就好像已在命令行中键入它一样。 缺省的命令字符串是 "<.$C0";即用于列显包括帧指针(但不包括参数)的栈跟踪。

::pgrep [ -no ] regexp

显示其名称与 regexp 正则表达式模式匹配的进程的进程信息。如果存在 -n 选项,则仅显示与模式匹配的最新进程。如果存在 -o 选项,则仅显示与模式匹配的最旧进程。

pid ::pid2proc

列显与指定的 PID 相对应的 proc_t 地址。 请记住 MDB 的缺省基数是十六进制的,因此使用 pgrep(1)ps(1) 获取的十进制 PID 应该使用 0t 作为前缀。

process ::pmap [-q]

列显指定的进程地址所指示的进程的内存映射。该 dcmd 使用与 pmap(1) 类似的格式显示输出。如果存在 -q 选项,则 dcmd 显示其输出的缩写形式(所需的处理时间较短)。

[ address ] ::ps [-fltTP]

列显与指定的进程或所有活动系统进程相关的信息摘要,与 ps(1) 类似。如果指定了 -f 选项,则列显完整的命令名和初始参数。如果指定了 -l 选项,则列显与每个进程关联的 LWP。 如果指定了 -t 选项,则列显与每个进程 LWP 关联的内核线程。如果指定了 -T 选项,则显示与每个进程关联的任务 ID。如果指定了 -P 选项,则显示与每个进程关联的项目 ID。

::ptree

列显进程树,其中子进程从其各自的父进程中缩进。 该 dcmd 使用与 ptree(1) 类似的格式显示输出。

address ::task

列显活动内核任务结构及其关联 ID 号和属性的列表。settaskid(2) 中对进程任务 ID 进行了更详细的介绍。

[ address ] ::thread [-bdfimps]

显示指定内核 kthread_t 结构的属性。 如果未指定 kthread_t 地址,则显示所有内核线程的属性。 dcmd 选项用于控制所显示的输出列。 如果不存在任何选项,则缺省情况下会启用 -i 选项。 如果存在 -b 选项,则显示与线程的十字转门 (turnstile) 和阻塞同步对象相关的信息。如果存在 -d 选项,则显示线程的分发程序优先级、绑定和上次分发时间。 如果存在 -f 选项,则输出中不显示状态为 TS_FREE 的线程。 如果存在 -i 选项(缺省选项),则显示线程状态、标志、优先级和中断信息。 如果存在 -m 选项,则所有其他输出选项都将合并到一行输出上。 如果存在 -p 选项,则显示线程的进程、LWP 和凭证指针。 如果存在 -s 选项,则显示线程的信号队列以及暂挂信号和保留信号的掩码。

vnode ::whereopen

在指定 vnode_t 地址的情况下,列显当前在其文件表中打开了此 vnode 的所有进程的 proc_t 地址。

Walker

file

在将 proc_t 结构的地址作为起点的情况下,迭代与指定进程关联的打开文件集(file_t 结构)。 file_t 结构在 <sys/file.h> 中定义。

proc

迭代活动进程 (proc_t) 结构。 此结构在 <sys/proc.h> 中定义。

任务

在指定任务指针的情况下,迭代作为指定任务成员的进程的 proc_t 结构列表。

thread

迭代内核线程 (kthread_t) 结构集。 如果调用了全局遍历,则 walker 将返回所有内核线程。如果使用 proc_t 地址作为起点来调用局部遍历,则将返回与指定进程关联的线程集。kthread_t 结构在 <sys/thread.h> 中定义。