发信人: Hopper() 
整理人: hahalee(2000-02-28 20:01:52), 站内信件
 | 
 
 
http://www.sina.com.cn 1999年11月26日 16:10 王波
 
 进程管理
   在系统shell提示下,使用者可以输入各种命令来执行相应的工作。每个命令 通常从终端键盘中获取输入,将输出打印到终端屏幕上,Unix使用标准输入stdi o和标准输出stdout,来表示每个命令的输入和输出,还使用一个标准错误输出s tderr用于输出错误信息。这三个标准输入输出系统缺省与终端设备相联系在一起 ,但是也可以使用管道的概念将它们重新定向,从一个文件或另一个命令中获取 输入,输出到另外的文件中或作为另一个命令的输入等。 
 
 $ ls > ls.out
 $ cat < ls.out
 $ ls -l | grep mbox
  
  
 
   FreeBSD可以同时运行多个进程,在shell下直接输入命令十,shell将进程放 到前台执行。如果要将进程放到后台执行,需要在命令行的结尾加上一个 “&”  符号。下面的命令从后台执行,从ftp.isc. org下载文件。
 
 $ wget  ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz  &
  
  
 
   当程序已经在前台执行的时候,可以使用^Z将这个程序挂起,暂停执行。然 后可以使用bg命令将这个挂起的程序放到后台执行,或者使用fg将某个在后台或 挂起的进程放到前台执行。
 
   当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态。在有 多个后台程序时,要使用来参数的fg 命令将不同序号的后台作业切换到前台上运 行。
 
 $ jobs
 [1]+  Running   wget ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz & 
 $ fg %1
 wget ftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz
  
  
 
   在启动了多个程序之后,可以使用ps命令来查看这些进程及其状态。
 
 $ ps
   PID  TT  STAT      TIME COMMAND
   501  p2  Ss     0:00.24 -bash (bash)
   988  p2  R+     0:00.00 ps
   765  p3  Is+    0:00.28 -bash (bash)
   230  v0  Is+    0:00.14 -bash (bash)
  
  
 
   显示的结果包括进程的标识号PID,控制终端TT(p0表示控制终端为ttyp0) ,进程的状态STAT,进程使用的处理器时间TIME和具体的命令。
 
   可以给ps命令加上参数,来获得更多的输出内容,以下命令将输出系统中所 有的进程:
 
 $ ps waux
 USER     PID %CPU %MEM   VSZ  RSS  TT  STAT STARTED      TIME COMMAND
  wb       989  0.0  0.4   400  236  p2  R+    5:48PM   0:00.00 ps -aux
  root       1  0.0  0.1   496   72  ??  Is   10:12PM   0:00.02 /sbin/in it --
 root       2  0.0  0.0     0    0  ??  DL   10:12PM   0:07.05  (pageda emon)
 root       3  0.0  0.0     0    0  ??  DL   10:12PM   0:00.20  (vmdaem on)
 root       4  0.0  0.0     0    0  ??  DL   10:12PM   0:04.27  (syncer )
 root      27  0.0  0.0   204    0  ??  IWs  -         0:00.00 (adjkern tz)
 root      91  0.0  0.5   820  328  ??  Is    2:12PM   0:00.82 syslogd
  daemon   100  0.0  0.0   792    0  ??  IWs  -         0:00.00 (portmap )
 root     131  0.0  0.3   864  164  ??  Is    2:12PM   0:00.06 inetd
 root     134  0.0  0.3   980  192  ??  Is    2:12PM   0:00.11 cron
 root     138  0.0  0.6  1252  380  ??  Is    2:12PM   0:00.11 sendmail : accepti
 wb       230  0.0  1.1  1540  668  v0  Is+   2:12PM   0:00.14 -bash (b ash)
 root     231  0.0  0.0   824    0  v1  IWs+ -         0:00.00 (getty)
  root     232  0.0  0.0   824    0  v2  IWs+ -         0:00.00 (getty)
  root     500  0.0  0.9   876  524  ??  Ss    4:19PM   0:01.78 telnetd
  wb       501  0.0  1.4  1540  888  p2  Ss    4:19PM   0:00.24 -bash (b ash)
 root     698  0.0  1.5  1644  900  ??  Is    4:49PM   0:00.02 /usr/loc al/sbin/s
 root     700  0.0  1.2  1308  748  ??  Ss    4:49PM   0:00.22 /usr/loc al/sbin/n
 root     702  0.0  3.4  2900 2112  ??  S     4:49PM   0:00.32 /usr/loc al/sbin/s
 root     764  0.0  0.9   880  540  ??  Is    5:10PM   0:00.22 telnetd
  wb       765  0.0  1.7  1536 1052  p3  Is+   5:10PM   0:00.28 -bash (b ash)
 root       0  0.0  0.0     0    0  ??  DLs  10:12PM   0:00.02  (swappe r)
  
  
 
   当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端 相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将 进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登 录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终 端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接 管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱 离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令 nohup来启动相应程序。
 
   从上面的ps的输出结果可以看出,有些程序没有控制终端,这些程序通常是 一些后台进程。使用命令nohup当然可以启动这样的程序,但nohup启动的程序在 进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕 输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通 常从系统启动时自动开始执行,系统关闭时才停止。如果偶然某个守护进程消失 了,那么它提供的服务将不再能被使用。
 
   在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分 网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同 的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件 /etc/ine t.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到 连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系 统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相 应反应会迟缓一些,不适合用于被密集访问的服务进程。
 
   当用户希望要停止一个进程时,如果进程在前台运行并接收输入的条件下, 可以输入^D,告诉进程输入结束,通常这意味着需要进程进行的处理要结束了, 从而通知进程结束。对于有些不以文件输入结束作为结束标志的进程,那么就可 以使用^C来向进程发送信号中断进程。
 
   如果上述方式均无效,或者进程运行在后台或者是一个守护进程,则需要手 工向进程发送信号,这可以通过kill 命令来做到。使用 “kill PID” 来向进程 发送终止信号SIGTERM,这个信号告诉进程需要退出。但是这些发送的信号都能被 程序通过编程的手段捕获并对其进行处理,一旦程序在这个处理过程中没有退出 ,而是忽略这个信号的情况下,就无法杀死进程。这时只能使用 “kill -9 PID ” 向PID代表的进程发送SIGKILL信号,这个信号不能被进程本身捕获,从而无条 件杀死进程。但是最好先首先发送SIGTERM信号终止进程。而很多守护进程能够捕 获 SIGHUP挂线信号,会根据这个信号进行处理,例如重新读入配置文件,重新刷 新进程本身等,因此可以再更改进程的配置文件之后,使用 “kill -HUP pid”  刷新进程的配置。
 
   kill命令需要使用进程的标识号PID,因此需要首先运行ps以得到这个标识号 。而FreeBSD下可以使用程序的名字来给进程发送信号,这个命令为killall,对 于大部分情况,它使用起来更为方便。
 
 
 查看系统状态
 
   FreeBSD下提供了相当丰富的工具可以用来查看系统的状态,使用者可以通过 它们来了解系统状态,从而优化系统性能。这些工具通常读取/dev/mem、/dev/k mem来获得内存中的系统信息,使用/kernel将这些信息中的变量转换为名字。最 基本的查看系统状态的命令为ps,用于报告当前系统中运行的进程的状态。
 
   pstat能显示系统中打开的文件数量、交换设备的使用率等系统信息。pstat 缺省使用/dev/mem设备文件,从系统内存中读取这些数据,或者可以指定一个co re文件,那么pstat从这个文件中读取数据。还需要给pstat 一个参数来告诉pst at应该显示那种系统信息,通常使用 “pstat -f” 显示出当前打开文件的列表 , “pstat -s” 显示交换设备的当前状态, “pstat -t” 显示当前使用的终 端设备文件的状态, “pstat -v” 显示激活的v节点的当前状态。 “pstat -T ” 显示这几个系统表的状态,包括当前使用的和可以利用的系统表空间,因此可 以用来检查系统在当前负载下是使用多大的系统表,帮助进行优化系统性能。
 
 $ pstat -T
  69/8232 files
 4M/137M swap space
  
  
 
   vmstat报告内核的统计信息,包括进程、虚存、处理器、磁盘等。可以使用  “-w” 参数指定每隔几秒时间,报告一次系统状态。
 
 $ vmstat
  procs      memory     page                   disks        faults       cpu
  r b w     avm   fre  flt  re  pi  po  fr  sr wd0 wd1 fd0   in   sy  c s us sy id
  0 0 0    3752 30476  643   0   0   0  19  43   0   0   0  262 2599  8 5 56  3 41
  
  
 
   其他与vmstat类似的命令还有,fstat报告系统中打开文件的信息,可以使用 文件名、进程号、用户名,以及指定文件所在的文件系统来限制要显示的文件。 iostat报告内核的输入输出统计信息,包括磁盘、终端等设备的I/O 状态。nets tat报告网络的有关统计信息。nfsstat显示NFS的统计信息。
 
   除此之外,systat以全屏幕方式显示各种系统统计信息,缺省情况下systat 是报告处理器的使用率,包括总利用状态、空闲使用率和各个进程的使用率。通 过指定参数,systat也能进行I/O的统计、虚存的统计、网络的统计等,这些参数 包括-iostat, -vmstat, -mbufs, -netstat, -ip, -icmp, -tcp, -swap等。
 
         /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
      Load Average   ||
 
         /0   /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 root     XF86_S3.cx XXXXXXX
 wb           kpanel XXX
 wb              kfm XX
 wb          kbgndwm XX
 wb       kblankscrn
 wb          krootwm
 wb              kwm
  
  
 
   除了这些系统提供的命令之外,FreeBSD也提供多种有效的系统工具,如综合 ps、systat和vmst at功能的top等。这些软件通常可以在多种Unix系统中使用, 也是十分常用的工具。也可以在FreeBSD系统中安装网络管理代理snmpd,然后使 用网络管理系统通过网络来获得FreeBSD主机的各种系统信息。 
 
 未完,待续。。。  
 
 
  -- 小多子:你知道我们佟家百年不衰的道理么?
         那就是,不要一条路走到黑!
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]
  | 
 
 
 |