当前位置:操作系统 > Unix/Linux >>

FreeBSD进程管理

在系统shell提示下,使用者可以输入各种命令来执行相应的工作。每个命令通常从终端键盘中获取输入,将输出打印到终端屏幕上,Unix使用标准输入stdio和标准输出stdout,来表示每个命令的输入和输出,还使用一个标准错误输出stderr用于输出错误信息。这三个标准输入输出系统缺省与终端设备相联系在一起,但是也可以使用管道的概念将它们重新定向,从一个文件或另一个命令中获取输入,输出到另外的文件中或作为另一个命令的输入等。 $ 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 %1wget 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 wauxUSER

  PID %CPU %MEM

  VSZ

  RSS

  TT

  STAT STARTED

  TIME COMMANDwb

  989

  0.0

  0.4

  400

  236

  p2

  R+

  5:48PM

  0:00.00 ps -auxroot

  1

  0.0

  0.1

  496

  72

  ??

  Is

  10:12PM

  0:00.02 /sbin/init --root

  2

  0.0

  0.0

  0

  0

  ??

  DL

  10:12PM

  0:07.05

  (pagedaemon)root

  3

  0.0

  0.0

  0

  0

  ??

  DL

  10:12PM

  0:00.20

  (vmdaemon)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 (adjkerntz)root

  91

  0.0

  0.5

  820

  328

  ??

  Is

  2:12PM

  0:00.82 syslogddaemon

  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 inetdroot

  134

  0.0

  0.3

  980

  192

  ??

  Is

  2:12PM

  0:00.11 cronroot

  138

  0.0

  0.6

  1252

  380

  ??

  Is

  2:12PM

  0:00.11 sendmail: acceptiwb

  230

  0.0

  1.1

  1540

  668

  v0

  Is+

  2:12PM

  0:00.14 -bash (bash)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 telnetdwb

  501

  0.0

  1.4

  1540

  888

  p2

  Ss

  4:19PM

  0:00.24 -bash (bash)root

  698

  0.0

  1.5

  1644

  900

  ??

  Is

  4:49PM

  0:00.02 /usr/local/sbin/sroot

  700

  0.0

  1.2

  1308

  748

  ??

  Ss

  4:49PM

  0:00.22 /usr/local/sbin/nroot

  702

  0.0

  3.4

  2900 2112

  ??

  S

  4:49PM

  0:00.32 /usr/local/sbin/sroot

  764

  0.0

  0.9

  880

  540

  ??

  Is

  5:10PM

  0:00.22 telnetdwb

  765

  0.0

  1.7

  1536 1052

  p3

  Is+

  5:10PM

  0:00.28 -bash (bash)root

  0

  0.0

  0.0

  0

  0

  ??

  DLs

  10:12PM

  0:00.02

  (swapper)


  当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。

  

  从上面的ps的输出结果可以看出,有些程序没有控制终端,这些程序通常是一些后台进程。使用命令nohup当然可以启动这样的程序,但nohup启动的程序在进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。如果偶然某个守护进程消失了,那么它提供的服务将不再能被使用。

  在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件 /etc/inet.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相应反应会迟缓一些,不适合用于被密集访问的服务进程。

  当用户希望要停止一个进程时,如果进程在前台运行并接收输入的条件下,可以输入^D,告诉进程输入结束,通常这意味着需要进程进行的处理要结束了,从而通知进程结束。对于有些
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,