Solaris内核proc目录简介

进程文件系统procfs,是一个伪文件系统,它允许对一些非传统意义上的文件通过标准文件I/O接口进行访问。procfs将Solaris内核进程架构进行了抽象,比如当前系统中所有运行着的进程会在/proc/目录下有所体现。系统中每个进程对应/proc/目录下的一个子目录,子目录名即相应进程号(PID),所有进程号子目录构成了/proc/目录的全部内容。

  许多提供进程数据和控制点的内核数据结构在/proc/子目录下有相应反映,

  比如,多线程进程中每个LWP的相关数据和控制结构体现在/proc/lwp/ 中。 /proc/目录下的对象不是真实磁盘文件,这些对象位于内核内存中,用户执行ls(1)命令显示/proc/目录结构时,系统读取内核内存并返回相应内容。

  通过/proc,相对简便地就可以获取进程信息,比如进程执行环境、内核资源利用率。进程控制和procfs直接相关,procfs最初的设计目的很简单,就是为编写调试器提供一组接口,现在已经有了相当大的改进。

  Solaris系统在/usr/proc/bin/目录下提供了一组工具从/proc中析取进程信息,同时可以进行简单的进程控制。可以参看proc(1)手册页。进程状态命令ps(1)也利用了procfs接口。

  下面列举可以通过/proc文件系统获取的控制和信息数据,关于这些文件的详细信息参看proc(4)手册页。

  /proc -- procfs的根目录

  /proc/ -- 某一确定进程的根目录,进程PID正是子目录名

  /proc//as -- 进程地址空间,即struct proc结构中p_as成员。换句话说,进程地址空间以/proc//as文件的形式展现出来,通过这个伪文件系统接口可以访问相应进程地址空间。

  struct as * p_as; /* 进程地址空间指针 */

  # ls -l /proc/53/as

  -rw------- 1 root root 1458176 2月 8 17:34 /proc/53/as

struct proc结构定义在/usr/include/sys/proc.h文件中。

  /proc//ctl -- 一个进程控制文件。可以只写打开该文件,然后给相应进程发送控制信息。可以停止、启动进程,设置进程停止于某一特殊事件。这演示了procfs的强大和便捷。进程控制、事件跟踪可以通过打开相应进程的控制文件完成,只需要写入期待行为的控制信息。参看proc(4)手册了解控制信息和控制函数的详细介绍。

  /proc//status -- 进程状态信息。对应/usr/include/sys/procfs.h文件里定义的struct pstatus结构。proc(4)手册页里也有描述。这个结构中有一个成员

  lwpstatus_t pr_lwp; /* status of the representative lwp */

  该成员对应一个有代表性的LWP(轻量级进程)。单线程进程只有一个LWP,很容易选定这个有代表性的LWP。那些多线程进程通常有多个LWPs,一个内核函数遍历当前进程的所有LWPs,根据他们的状态选取这个有代表性的LWP。首先选取正在执行中的LWP,如果不存在这样的LWP,按照可运行、休眠、停止的顺序选取LWP。

  /proc//lstatus -- lwpstatus结构数组,进程中每个LWP对应一个lwpstatus结构。struct lwpstatus结构定义在/usr/include/sys/procfs.h文件中。

  /proc//psinfo -- 类似ps(1)命令提供的进程信息。对应struct psinfo结构,类似struct pstatus结构,struct psinfo结构中有一个成员

  lwpsinfo_t pr_lwp; /* information for representative lwp */

  该成员的对应一个有代表性的LWP。

  /proc//lpsinfo -- lwpsinfo结构数组,进程中每个LWP对应一个lwpsinfo结构

  /proc//map -- 地址空间映射信息,可以用pmap(1)命令显示这些数据信息。

  /proc//rmap -- 进程中保留地址空间段。用pmap -r命令显示这些数据信息。

/proc//xmap -- 扩展地址空间映射信息。用pmap -x命令显示这些数据信息。

  /proc//cred -- 进程身份验证信息,对应/usr/include/sys/procfs.h文件中

  定义的struct prcred结构。

  /proc//sigact -- sigaction结构数组,描述和本进程相关的所有信号设置。

  struct sigaction结构定义在/usr/include/sys/signal.h文件中。

  /proc//auxv -- auxv_t结构数组,包含进程执行时传递给动态链接器的初始值。

  auxv_t结构定义在/usr/include/sys/auxv.h文件中。

  /proc//ldt -- 局部描述符表(LDT),仅存于Intel x86架构。

  /proc//usage -- 进程资源利用率的相关数据,对应struct prusage结构,该

  结构定义在/usr/include/sys/procfs.h文件中。

  /proc//lusage -- prusage结构数组,对应各个LWP资源利用状况。

  /proc//pagedata -- 进程地址空间的另外一种表现方式,可以用于跟踪页面级

  的引用和修改。参看struct prpageheader结构定义。

  /proc//watch -- prwatch结构数组。通过写控制文件/proc//ctl可以设置PCWATCH操作,此时建立该文件。允许监视一个或多个地址空间范围,当访问这些被监视页面时,产生一次陷入。

  scz注:这个功能和SoftIce的BPR功能类似,adb支持这种陷入,不知是否利用了procfs

  /proc//cwd -- 到进程当前工作目录的符号链接

  /proc//root -- 到进程根目录的符号链接(和上面那个什么区别)

  /proc//fd -- 这是一个子目录,包含进程打开的文件句柄

  /proc//fd/nn -- 对应进程打开的某个确定的文件句柄

  /proc//object -- 这是一个子目录,包含进程相关的可执行文件以及动态链接库。

  /proc//object/nn -- 二进制目标文件。进程对应的可执行文件名为a.out,其余是进程相关的动态链接库文件。

  object目录提供的信息是进程级的,每个/proc//目录有一个lwp子目录,提供了LWP级的信息:

  /proc//lwp -- 这是一个子目录,包含进程中所有LWPs的信息

  /proc//lwp/ -- 这是一个子目录,包含对应lwpid的LWP信息

  /proc//lwp//lwpctl -- 一个控制文件,通过它可以在LWP级上针对每个LWP发布控制操作

  /proc//lwp//lwpstatus -- LWP状态信息,对应lwpstatus结构,该结构定义在/usr/include/sys/procfs.h文件中

  /proc//lwp//lwpsinfo -- 对应lwpsinfo结构,同样定义在/usr/include/sys/procfs.h文件中

  /proc//lwp//lwpusage -- LWP资源利用信息,对应prusage结构

  /proc//lwp//xregs -- 这个文件是处理器架构相关的,某些平台上可能没有这个文件。对于SPARC系统,这个文对/usr/include/sys/procfs_isa.h文件中定义的prxregset结构。

  /proc//lwp//gwindows -- 常规寄存器窗口。这个文件仅存于SPARC架构的系统,描述LWP使用的常规寄存器组(硬件上下文的一部分),对应gwindows结构,该结构定义在/usr/include/sys/regset.h文件中。

  /proc//lwp//asrs -- 辅助寄存器组,仅存于SPARC V9(UltraSPARC)架构,专为SPARC V9架构定义的一组额外的硬件寄存器,要求sun4u、64-bit内核(Solaris 7及其后续版本)、64-bit进程。注意,64-bit内核可以运行32-bit进程,但是32-bit进程没有这样一个文件与之对应。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值