进程信息

在浏览 /proc 目录的时候您会发现许多目录的名称是一些数字。这些目录保存了当前系统中运行的所有进程的信息。

$ ls -d /proc/[0-9]*
/proc/1/    /proc/302/  /proc/451/  /proc/496/  /proc/556/  /proc/633/
/proc/127/  /proc/317/  /proc/452/  /proc/497/  /proc/557/  /proc/718/
/proc/2/    /proc/339/  /proc/453/  /proc/5/    /proc/558/  /proc/755/
/proc/250/  /proc/385/  /proc/454/  /proc/501/  /proc/559/  /proc/760/
/proc/260/  /proc/4/    /proc/455/  /proc/504/  /proc/565/  /proc/761/
/proc/275/  /proc/402/  /proc/463/  /proc/505/  /proc/569/  /proc/769/
/proc/290/  /proc/433/  /proc/487/  /proc/509/  /proc/594/  /proc/774/
/proc/3/    /proc/450/  /proc/491/  /proc/554/  /proc/595/

请注意,作为普通用户,您(理论上)只能查看与您自己的进程相关的信息,而不是其他用户的。因此,请升级为 root 用户,并查看进程 127 包含哪些信息:

$ su
Password:
$ cd /proc/127
$ ls -l
total 0-9
-r--r--r--    1 root     root            0 Dec 14 19:53 cmdline
lrwx------    1 root     root            0 Dec 14 19:53 cwd -> //
-r--------    1 root     root            0 Dec 14 19:53 environ
lrwx------    1 root     root            0 Dec 14 19:53 exe -> /usr/sbin/apmd*
dr-x------    2 root     root            0 Dec 14 19:53 fd/
pr--r--r--    1 root     root            0 Dec 14 19:53 maps|
-rw-------    1 root     root            0 Dec 14 19:53 mem
lrwx------    1 root     root            0 Dec 14 19:53 root -> //
-r--r--r--    1 root     root            0 Dec 14 19:53 stat
-r--r--r--    1 root     root            0 Dec 14 19:53 statm
-r--r--r--    1 root     root            0 Dec 14 19:53 status
$

每个目录包含同样的项目。以下简单介绍其中某些项目:

  1. cmdline:该(虚拟)文件包含了启动该进程的整个命令行。它未曾格式化:程序与其参数之间没有空格,行末也没有换行。要查看它,您可以使用:perl -ple 's,\00, ,g' cmdline

  2. cwd:该符号链接指向该进程的当前工作目录。

  3. environ:该文件包含为该进程定义的所有环境变量,格式为 变量=值。与 cmdline 文件一样,其内容未曾格式化过:各个变量之间没有分行,文件末尾也没有换行。要查看,可以:perl -pl -e 's,\00,\n,g' environ

  4. exe:这是指向该进程所执行的可执行程序文件的符号链接。

  5. fd:在此子目录中包含了该进程当前打开的所有描述符。参见下文。

  6. maps:当您打印该命名管道内容时(例如使用 cat),您将看到该进程地址空间中当前映射到文件中的那部分。自左至右各列为:与该映射关联的地址空间,与该映射关联的权限,该映射起始位置的偏移量(从文件开始处算起),保存该映射文件设备的主、从序号(十六进制格式),该文件的 inode 序号,以及该文件的文件名。当设备号为 0 且没有 inode 号或文件名时,它就是一个匿名映射。请参阅 mmap(2)

  7. root:该符号链接指向该进程使用的根目录。通常为 /,请参阅 chroot(2)

  8. status:该文件包含该进程的众多信息:可执行文件名、当前状态、PIDPPID、实际及有效的 UIDGID、内存使用情况、以及其他。请注意,statstatm 现已过时。它们包含的信息现存于 status

浏览进程 127 的 fd 目录,我们将看到:

$ ls -l fd
total 0
lrwx------    1 root     root           64 Dec 16 22:04 0 -> /dev/console
l-wx------    1 root     root           64 Dec 16 22:04 1 -> pipe:[128]
l-wx------    1 root     root           64 Dec 16 22:04 2 -> pipe:[129]
l-wx------    1 root     root           64 Dec 16 22:04 21 -> pipe:[130]
lrwx------    1 root     root           64 Dec 16 22:04 3 -> /dev/apm_bios
lr-x------    1 root     root           64 Dec 16 22:04 7 -> pipe:[130]
lrwx------    1 root     root           64 Dec 16 22:04 9 ->
/dev/console
$

实际上,这是该进程打开的文件描述符列表。每个打开的描述符由一个符号链接表示,其名称为该描述符的编号,并指向该描述符打开的文件[25]。请注意这些符号链接的权限:它们的意义仅代表被相应描述符打开的文件的权限。



[25] 如果您还记得“重定向和管道”一节一节的内容,您就应该了解描述符 0、1 和 2 分别代表什么。