proc编译手册_Linux下面如何的proc文件--------编写Linux资源管理器

cmdline该文件保存了进程的完整命令行. 如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文件里, 这时候对该文件的读操作将返回零个字符. 该文件以空字符 null 而不是换行符作为结束标志.cwd一个符号连接, 指向进程当前的工作目录. 例如, 要找出进程 20 的 cwd, 你可以:

cd /proc/20/cwd; /bin/pwd

请注意 pwd 命令通常是 shell 内置的, 在这样的情况下可能工作得不是很好.

environ该文件保存进程的环境变量, 各项之间以空字符分隔, 结尾也可能是一个空字符. 因此, 如果要输出进程 1 的环境变量, 你应该:

(cat /proc/1/environ; echo) | tr ";\000"; ";\n";

(至于为什么想要这么做, 请参阅 lilo(8).)exe也是一个符号连接, 指向被执行的二进制代码.

在 Linux 2.0 或者更早的版本下, 对 exe 特殊文件的 readlink(2) 返回一个如下格式的字符串:

[设备号]:节点号

举个例子, [0301]:1502 就是某设备的 1502 节点, 该设备的主设备号为 03 (如 IDE, MFM 等驱动器), 从设备号为 01 (第一个驱动器的第一分区).

而在 Linux 2.2 下, readlink(2)则给出命令的实际路径名.

另外, 该符号连接也可以正常析引用(试图打开 exe 文件实际上将打开一个可执行文件). 你甚至可以键入 /proc/[number]/exe 来运行 [number] 进程的副本.

带 -inum 选项的 find(1) 命令可以定位该文件.fd进程所打开的每个文件都有一个符号连接在该子目录里, 以文件描述符命名, 这个名字实际上是指向真正的文件的符号连接,(和 exe 记录一样).例如, 0 是标准输入, 1 是标准输出, 2 是标准错误, 等等.

程序有时可能想要读取一个文件却不想要标准输入,或者想写到一个文件却不想将输出送到标准输出去,那么就可以很有效地用如下的办法骗过(假定 -i 是输入文件的标志, 而 -o 是输出文件的标志):

foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...

这样就是一个能运转的过滤器. 请注意该方法不能用来在文件里搜索, 这是因为 fd 目录里的文件是不可搜索的.

在 UNIX 类的系统下, /proc/self/fd/N 基本上就与 /dev/fd/N 相同. 实际上, 大多数的 Linux MAKEDEV 脚本都将 /dev/fd 符号连接到 [..]/proc/self/fd 上.maps该文件包含当前的映象内存区及他们的访问许可.

格式如下: address perms offset dev inode

00000000-0002f000 r-x-- 00000400 03:03 1401

0002f000-00032000 rwx-p 0002f400 03:03 1401

00032000-0005b000 rwx-p 00000000 00:00 0

60000000-60098000 rwx-p 00000400 03:03 215

60098000-600c7000 rwx-p 00000000 00:00 0

bfffa000-c0000000 rwx-p 00000000 00:00 0

address 是进程所占据的地址空间, perms 是权限集: r = read

w = write

x = execute

s = shared

p = private (copy on write)

offset 是文件或者别的什么的偏移量, dev 是设备号(主设备号:从设备号), 而 inode 则是设备的节点号. 0 表明没有节点与内存相对应, 就象 bss 的情形.

在 Linux 2.2 下还增加了一个域给可用的路径名.mem该文件并不是 mem (1:1) 设备, 尽管它们有相同的设备号. /dev/mem 设备是做任何地址转换之前的物理内存, 而这里的 mem 文件是访问它的进程的内存.目前这个 mem 还不能 mmap(2) (内存映射)出去,而且可能一直要等到内核中增加了一个通用的 mmap(2) 以后才能实现. (也许在你读本手册页时这一切已经发生了)mmapmmap(2) 做的 maps 映射目录,是和 exe, fd/* 等类似的符号连接. 请注意 maps 包含了比 /proc/*/mmap 更多的信息, 所以应该废弃 mmap.

";0"; 通常指 libc.so.4.

在 linux 内核 1.1.40 里, /proc/*/mmap 被取消了. (现在是 真的 废弃不用了!)root依靠系统调用 chroot(2),unix 和 linux 可以让每个进程有各自的文件系统根目录. 由 chroot(2) 系统调用设置.根指向文件系统的根,性质就象 exe, fd/* 等一样.stat进程状态信息, 被命令 ps(1) 使用.

现将该文件里各域, 以及他们的 scanf(3)格式说明符, 按顺序分述如下:pid %d进程标识.comm %s可执行文件的文件名, 包括路径. 该文件是否可见取决于该文件是否已被交换出内存.state %c";RSDZT"; 中的一个, R 是正在运行, S 是在可中断的就绪态中睡眠, D 是在不可中断的等待或交换态中睡眠, Z 是僵死, T 是被跟踪或被停止(由于收到信号).ppid %d父进程 PID.pgrp %d进程的进程组 ID.session %d进程的会话 ID.tty %d进程所使用终端.tpgid %d当前拥有该进程所连接终端的进程所在的进程组 ID.flags %u进程标志. 目前每个标志都设了数学位, 所以输出里就不包括该位. crt0.s 检查数学仿真这可能是一个臭虫, 因为不是每个进程都是用 c 编译的程序. 数学位应该是十进制的 4, 而跟踪位应该是十进制的 10.minflt %u进程所导致的小错误(minor faults)数目, 这样的小错误(minor faults)不需要从磁盘重新载入一个内存页.cminflt %u进程及其子进程所导致的小错误(minor faults)数目.majflt %u进程所导致的大错误(major faults)数目, 这样的大错误(major faults)需要重新载入内存页.cmajflt %u进程及其子进程所导致的大错误(major faults)数目.utime %d进程被调度进用户态的时间(以 jiffy 为单位, 1 jiffy=1/100 秒,另外不同硬件体系略有不同).stime %d进程被调度进内核态的时间, 以 jiffy 为单位.cutime %d进程及其子进程被调度进用户态的时间, 以 jiffy 为单位.cstime %d进程及其子进程被调度进内核态的时间, 以 jiffy 为单位.counter %d如果进程不是当前正在运行的进程, 就是进程在下个时间片当前可以拥有的最大时间, 以 jiffy 为单位. 如果进程是当前正在运行的进程, 就是当前时间片中所剩下 jiffy 数目.priority %d标准优先数只再加上 15, 在内核里该值总是正的.timeout %u当前至进程的下一次间歇时间, 以 jiffy 为单位.itrealvalue %u由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.starttime %d进程自系统启动以来的开始时间, 以 jiffy 为单位.vsize %u虚拟内存大小.rss %uResident Set Size(驻留大小): 进程所占用的真实内存大小, 以页为单位, 为便于管理而减去了 3. rss 只包括正文, 数据以及堆栈的空间, 但不包括尚未要求装入内存的或已被交换出去的.rlim %u当前进程的 rss 限制, 以字节为单位, 通常为 2,147,483,647.startcode %u正文部分地址下限.endcode %u正文部分地址上限.startstack %u堆栈开始地址.kstkesp %uesp(32 位堆栈指针) 的当前值, 与在进程的内核堆栈页得到的一致.kstkeip %uEIP(32 位指令指针)的当前值.signal %d待处理信号的 bitmap(通常为 0).blocked %d被阻塞信号的 bitmap(对 shell 通常是 0, 2).sigignore %d被忽略信号的 bitmap.sigcatch %d被俘获信号的 bitmap.wchan %u进程在其中等待的通道, 实际是一个系统调用的地址. 如果你需要文本格式的, 也可以在名字列表中找到. (如果有最新版本的 /etc/psdatabase, 你可以在 ps -l 的结果中的 WCHAN 域看到)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值