FreeBSD 使用手册
上一页 | 第3章 　UNIX 基础 | 下一页

# 3.7 进程

FreeBSD 是一个多任务操作系统。 这就意味着好像一次可以运行一个以上的程序。 每个占用一定时间运行的程序就叫 进程 (process)。 你运行的每一个命令会至少启动一个新进程，还有很多一直运行着的系统进程， 用以维持系统的正常运作。

每个进程用来标识的一个编号就叫 进程 ID， 或叫 PID。 而且，就像文件那样，每个进程也有所属用户和所属群体。 所属用户和所属群体使用在这方面:确定这个进程可以打开那些文件和那些设备， 从而在初期使用文件的权限。 多数的进程都有一个父进程， 而进程是依靠父进程来启动的。 例如，假如您把命令输入到shell里那shell是一个进程，而您运行的各个命令同样是进程， 那么，shell就是您各个运行进程的父进程。 而这方面有一个例外的进程就叫init(8)。 `init`始终是首个进程,，所以他的PID始终是1， 而`init`在FreeBSD起动时由内核自动启动。

在系统上，有两个命令对进程观察非常有用:ps(1) 和 top(1)。 这个`ps`命令作用是观察当前运行进程的状态， 显示他们的PID，使用了多少内存，它们启动的命令行。 而`top`命令则是显示所有运行进程，并在以秒计的短时内更新数据。 您能交互式的观察您计算机的工作。

默认情况下， `ps`仅显示出您自己所运行的命令。 例如:

    % ps
      PID  TT  STAT      TIME COMMAND
      298  p0  Ss     0:01.10 tcsh
     7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
    37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
    48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
    48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)
    72210  p0  R+     0:00.00 ps
      390  p1  Is     0:01.14 tcsh
     7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y
     6688  p3  IWs    0:00.00 tcsh
    10735  p4  IWs    0:00.00 tcsh
    20256  p5  IWs    0:00.00 tcsh
      262  v0  IWs    0:00.00 -tcsh (tcsh)
      270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
      280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
      284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc
      285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

在这个例子里您可看到，从 ps(1) 输出的每一列是有规律的。 `PID` 就是进程ID，这个较早前已讨论过了。 PID号的分配由 1一直上升直到99999， 当您运行到超过限制时，这些编号会回转分配 (仍在使用中的 PID 不会分配给其他进程)。 `TT`这一列显示了程序运行所在的终端， 目前可以安全地忽略。 `STAT` 显示程序的状态，也可以安全地被忽略。 `TIME`是程序在CPU处理时间──运行的时间量， 并不是指您程序启动到现在的所用的时间。 许多程序碰巧遇到某方面在他们之前要花费大量CPU处理时间时，他们就必须等候。 最后， `COMMAND` 是运行程序时使所用的命令行。

ps(1)支持使用各种选项去改变显示出来的内容， 最有用的一个就是`auxww`。 `a`选项显示出所有运行进程的内容， 而不仅仅是您的进程。 `u`选项显示出进程所归属的用户名字以及内存使用， `x` 选项显示出后台进程。 而 `ww` 选项表示为 ps(1) 把每个进程的整个命令行全部显示完， 而不是由于命令行过长就把它从屏幕上截去。

下面和从top(1)输出是类似的，一个示例式对话就象这样子:

    % top
    last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10
    47 processes:  1 running, 46 sleeping
    CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
    Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
    Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

      PID USERNAME PRI NICE  SIZE    RES STATE    TIME   WCPU    CPU COMMAND
    72257 nik       28   0  1960K  1044K RUN      0:00 14.86%  1.42% top
     7078 nik        2   0 15280K 10960K select   2:54  0.88%  0.88% xemacs-21.1.14
      281 nik        2   0 18636K  7112K select   5:36  0.73%  0.73% XF86_SVGA
      296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm
    48630 nik        2   0 29816K  9148K select   3:18  0.00%  0.00% navigator-linu
      175 root       2   0   924K   252K select   1:41  0.00%  0.00% syslogd
     7059 nik        2   0  7260K  4644K poll     1:38  0.00%  0.00% mutt
    ...

这个输出分成两部份。 前面部份(起始前五行) 显示了:运行于最后进程的PID、 系统负载均衡 (那个是指系统繁忙时的调节方式)、 系统正常运行时间 ( 指从启动算起所用的时间) 和当前时间。 前面部份另外的图表 涉及:多少进程在运行(这个情况是47)， 多少内存和多少交换分区在使用， 和在不同CPU状态里系统消耗多少时间。

在那下面一连串的纵列和从ps(1)输出的的内存是相似的。 如以前ps(1)一样，您能见到:PID、用户名、CPU处理时间合计、运行的命令。 top(1)默认是显示您的进程所用内存空间的合计。 内存空间这里分成两列，一列为总体大小，另一列是必须请求驻留大小是多少内存──总体大小。 而驻留大小实际上是瞬间使用的多少。 在以上那个例子，您会看到那Netscape®总计需要30 MB内存， 但实际只用了9 MB。

top(1) 每两秒自动刷新一次，您可以用`s`改变刷新的秒数。

上一页 | 起始页 | 下一页
文件系统的挂接和卸下 | 上一级 | 守护进程，信号和杀死进程

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.