电脑技术学习

FreeBSD进程管理

dn001

1 2 3 下一页

  在系统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 %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/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 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 (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 telnetd
wb    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/s
root   700 0.0 1.2 1308 748 ?? Ss  4:49PM  0:00.22 /usr/local/sbin/n
root   702 0.0 3.4 2900 2112 ?? S   4:49PM  0:00.32 /usr/local/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 (bash)
root    0 0.0 0.0   0  0 ?? DLs 10:12PM  0:00.02 (swapper)

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

标签: