24 FreeBSD连载:查看系统状态

进程管理在系统shell提示下,使用者可以输入各种命令来执行相应的工作 。每个命令通常从终端键盘中获取输入,将输出打印到终端屏幕上,Unix使用标准输入stdio和标准输出stdout,来表示每个命令的输入和输出,还使用一个标准错误输出stderr用于输出错误信息 。这三个标准输入输出系统缺省与终端设备相联系在一起,但是也可以使用管道的概念将它们重新定向,从一个文件或另一个命令中获取输入,输出到另外的文件中或作为另一个命令的输入等 。
$ ls > ls.out
$ cat < ls.out
$ ls -l | grep mboxFreeBSD可以同时运行多个进程,在shell下直接输入命令十,shell将进程放到前台执行 。如果要将进程放到后台执行,需要在命令行的结尾加上一个 “&” 符号 。下面的命令从后台执行,从ftp.isc.org下载文件 。
$ wgetftp://ftp.isc.org/pub/inn/inn-1.7.2.tar.gz&当程序已经在前台执行的时候,可以使用^Z将这个程序挂起,暂停执行 。然后可以使用bg命令将这个挂起的程序放到后台执行,或者使用fg将某个在后台或挂起的进程放到前台执行 。
当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态 。在有多个后台程序时,要使用来参数的fg命令将不同序号的后台作业切换到前台上运行 。
$ jobs

[1]Runningwget 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
PIDTTSTATTIME COMMAND
501p2Ss0:00.24 -bash (bash)
988p2R0:00.00 ps
765p3Is0:00.28 -bash (bash)
230v0Is0:00.14 -bash (bash)显示的结果包括进程的标识号PID,控制终端TT(p0表示控制终端为ttyp0),进程的状态STAT,进程使用的处理器时间TIME和具体的命令 。
可以给ps命令加上参数,来获得更多的输出内容,以下命令将输出系统中所有的进程:
$ ps waux
USERPID %CPU %MEMVSZRSSTTSTAT STARTEDTIME COMMAND
wb9890.00.4400236p2R5:48PM0:00.00 ps -aux
root10.00.149672??Is10:12PM0:00.02 /sbin/init --
root20.00.000??DL10:12PM0:07.05(pagedaemon)
root30.00.000??DL10:12PM0:00.20(vmdaemon)
root40.00.000??DL10:12PM0:04.27(syncer)
root270.00.02040??IWs- 0:00.00 (adjkerntz)
root910.00.5820328??Is2:12PM0:00.82 syslogd
daemon1000.00.07920??IWs- 0:00.00 (portmap)
root1310.00.3864164??Is2:12PM0:00.06 inetd
root1340.00.3980192??Is2:12PM0:00.11 cron
root1380.00.61252380??Is2:12PM0:00.11 sendmail: accepti
wb2300.01.11540668v0Is2:12PM0:00.14 -bash (bash)
root2310.00.08240v1IWs- 0:00.00 (getty)
root2320.00.08240v2IWs- 0:00.00 (getty)
root5000.00.9876524??Ss4:19PM0:01.78 telnetd
wb5010.01.41540888p2Ss4:19PM0:00.24 -bash (bash)
root6980.01.51644900??Is4:49PM0:00.02 /usr/local/sbin/s
root7000.01.21308748??Ss4:49PM0:00.22 /usr/local/sbin/n
root7020.03.42900 2112??S4:49PM0:00.32 /usr/local/sbin/s
root7640.00.9880540??Is5:10PM0:00.22 telnetd
wb7650.01.71536 1052p3Is5:10PM0:00.28 -bash (bash)
root00.00.000??DLs10:12PM0:00.02(swapper)【24 FreeBSD连载:查看系统状态】当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出 。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系 。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束 。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序 。

推荐阅读