Linux管理进程的最好方法就是使用命令行下的系统命令。Linux下面的进程涉及的命令有at, bg, fg, kill, crontab, jobs, ps, pstree, top, nice, renice, sleep, nohup。
1.at命令:定时运行命令
作用:at命令在指定时刻执行指定的命令序列。
格式:
at [-V] [-q x] [-f file] [-m] time |
主要选项如下。
-V:显示作业将被执行的时间。
-q:选用q参数则可选队列名称,队列名称可以是a~z和A~Z之间的任意字母。队列字母顺序越高则队列优先级别越低。
-f:从文件中读取命令或shell脚本,而非在提示后指定它们。
-m:执行完作业后发送电子邮件到用户。
time:设定作业执行的时间。time参数可以是下面格式中的任何一种。
HH:MM格式--如04:00,代表4:00AM。如果时间已过,就会在第二天的这一时间执行。
midnight代表12:00AM。noon代表12:00PM。teatime代表4:00PM。
英文月名日期年份格式--如January 15 2005,代表2005年1月15日。年份可无。
MMDDYY、MM/DD/YY或MM.DD.YY格式--如011505,代表2005年1月15日。
now +时间格式--时间以minutes、hours、days或weeks为单位。如now + 5 days,代表命令应该在5天之后的此时此刻执行。偏移量的格式为时间+偏移量,单位是minutes、hours和days。
说明:at命令实际上是一组命令集合。at命令在指定时刻执行指定的命令序列。atq查询已经设定的命令序列。atrm删除已经设定的命令序列。 batch当系统负载低于一个设定值(0.8),执行设定的命令序列。
应用实例如下。
(1)让系统在两天后的17:30执行文件data中指定的作业,使用命令:
#at -f data 15:30 +2 days |
(2)配置batch作业
要在系统平均载量降到0.8以下时执行某项一次性的任务,使用batch命令。键入batch命令后,"at>"提示就会出现。键入要执行的 命令,按"Enter"键,然后键入"Ctrl-D"。你可以指定多条命令,方法是键入每一条命令后按"Enter"键。键入所有命令后, 按"Enter"键转入一个空行,然后再键入"Ctrl-D"。或者你也可以在提示后输入shell脚本,在脚本的每一行后按"Enter"键,然后在空 行处键入"Ctrl-D"来退出。系统平均载量一降到0.8以下,这组命令或脚本就会被执行。如果这组命令或脚本试图在标准输出中显示信息,该输出会用电 子邮件方式被邮寄给用户。
(3)进阶应用:控制对at和batch的使用
通过/etc/at.allow和/etc/at.deny文件可以用来限制对at和batch命令的使用。这两个使用控制文件的格式都是每行一个 用户。两个文件都不允许使用空白字符。如果控制文件被修改了,at守护进程不必被重启。每次用户试图执行at或batch命令时,使用控制文件都会被读 取。不论控制文件如何规定,超级权限用户总是可以执行at和batch命令。如果at.allow文件存在,只有其中列出的用户才能使用at或batch 命令,at.deny文件会被忽略。如果at.allow文件不存在,所有在at.deny文件中列出的用户都被禁止使用at和batch命令。
2.bg命令后台运行命令
作用:bg命令使一个被挂起的进程在后台执行。
格式:bg
该命令无参数。
使用说明:Linux作为一个多任务环境,用户会同时执行多项任务,例如,查看系统情况、备份资料、编辑文件和打印文件等。耗时长的任务不应该在前 台任务中执行,而应该交给后台任务去执行。这样前台任务可继续正常运作其他的操作,不用等待。
应用实例如下。
(1)如果要将一个大目录的文件进行排序后,将结果输入到一个文件中,可以使用命令:
#du -a / | sort -rn > /tmp/du.sorted |
(2) 由于这个命令执行时间很长,可以把它放在后台运行。使用组合键"Ctrl+Z"。然后使用bg命令。如果想直接把这个命令放在后台执行,可以在命令后使 用"&"符号:
#du -a / | sort -rn > /tmp/du.sorted & |
3.Fg挂起程序
作用:fg命令使一个被挂起的进程在前台执行。
格式:fg -[job-spec]
[job-spec]:后台任务号码。
说明:fg命令和bg命令是相对应的。如果想查看后台程序运行情况,可以使用fg命令把它调回前台查看。bg命令可以使多个进程放到后台中执行。
应用实例如下。
使用fg命令时,要加入后台任务号码,如果不加任何号码,则所变动的均是当前任务。
#du -a / | sort -rn > /tmp/du.sorted & |
4.Jobs显示后台程序
作用:jobs命令显示后台任务的执行情况。
格式:jobs [选项] [jobspec…]
主要选项如下。
-l:长输出格式,显示全部内容。
-n:不输出信息。
-p:只输出进程号。
-r:只输出运行的进程。
[jobspec]:后台任务号码。
应用实例如下。
先把两个进程放在系统后台运行,然后使用jobs命令查看后台任务的执行情况:
#du -a /etc > user.data & |
说明:上面的当前任务是"du -a /etc > user.data",因为后台任务号码是"[1]"。当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码" [2]"的后台任务。即当前任务是动态的。
图4-8第二行代码中,USER表示启动进程用户。PID表示进程标志号。%CPU表示运行该进程占用CPU的时间与该进程总的运行时间的比 例。%MEM表示该进程占用内存和总内存的比例。VSZ表示占用的虚拟内 存大小,以KB为单位。RSS为进程占用的物理内存值,以KB为单位。TTY表示该进程建立时所对应的终端,"?"表示该进程不占用终端。 STAT表示进程的运行状态,包括以下几种代码:D,不可中断的睡眠;R,就绪(在可运行队列中);S,睡眠;T,被跟踪或停止;Z,终止(僵死)的进 程,Z不存在,但暂时无法消除;W,没有足够的内存分页可分配;<高优先序的进程;N,低优先序的进程;L,有内存分页分配并锁在内存体内(实时系 统或I/O)。START为进程开始时间。TIME为执行的时间。COMMAND是对应的命令名。
点击查看大图
(点 击查看大图)图4-8 ps-aux命令详解
应用实例如下。
在进行系统维护时,如果CPU负载突然增加,而又不知道是哪一个进程造成的情况。使用命令:
#ps aux | sort +3n |
说明 因为%CPU选项在第三列,所以sort选3作为参数,+表示升序输出结果。
8.pstree命令
pstree命令列出当前的进程,以及它们的树状结构。
格式:pstree [选项] [pid|user]
主要选项如下。
-a:显示执行程序的命令与完整参数。
-c:取消同名程序,合并显示。
-h:对输出结果进行处理,高亮显示正在执行的程序。
-l:长格式显示。
-n:以PID大小排序。
-p:显示PID。
-u:显示UID信息。
-G:使用VT100终端编码显示。
-U:使用UTF-8(Unicode)编码显示。
说明:使用ps命令得到的数据精确,但数据庞大,这一点对掌握系统整体概况来说是不容易的。pstree正好可以弥补这个缺憾。它能将当前的执行程 序以树状结构显示。pstree支持指定特定程序(PID)或使用者(USER)作为显示的起始。
应用实例如下。
进程启动的时候可能会产生自己的一个子进程。运行pstree命令就可以很容易地看到这些信息。以超级用户权限运行pstree:
#init-+-apmd |
命令对程序名称相同的会自动合并,所有"|-httpd---8*[httpd]"即表示系统中有8个httpd进程产生的子进程。
9.top命令显示进程
top命令用来显示系统当前的进程状况。
格式:top [选项]
主要选项如下。
d:指定更新的间隔,以秒计算。
q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行。
c:显示进程完整的路径与名称。
S:累积模式,会将已完成或消失的子进程的CPU时间累积起来。
s:安 全模式。
i:不显示任何闲置(Idle)或无用(Zombie)的进程。
n:显示更新的次数,完成后将会退出top。
说明:top命令和ps命令的基本作用是相同的,都显示系统当前的进程状况。但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状 态。这里结合图4-9来说明它给出的信息。
在图4-9中,第一行表示的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行显示的是所有启动的、目前运行的、挂起 (Sleeping)的和无用(Zombie)的进程。第三行显示的是目前CPU的使用情况,包括系统占用的比例、用户使用比例、闲置(Idle)比例。 第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。第五行显示交换分区的使用情况,包括总的交换分区、使用 的、空闲的和用于高速缓存的交换分区。第六行显示的项目最多,下面列出了详细解释。
PID(Process ID):进程标志号,是非零正整数。USER:进程所有者的用户名。PR:进程的优先级别。NI:进程的优先级别数值。VIRT:进程占用的虚拟内存值。 RES:进程占用的物理内存值。SHR:进程使用的共享内存值。 STAT:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。%CPU:该进程占用的CPU使用率。%MEM:该 进程占用的物理内存和总内存的百分比。TIME:该进程启动后占用的总的CPU时间。COMMAND:进程启动的启动命令名称,如果这一行显示不下,进程 会有一个完整的命令行。top命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启 动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而 言尤其重要。但是,它的缺点是会消耗很多系统资源。
10.nice命令改变权限优先级
作用:nice命令可以改变程序执行的优先权等级。
格式:nice [-n <优先等级>][--help][--version][命令]
主要选项如下。
-n<优先等级>或-<优先等级>或--adjustment=<优先等级>:设置欲执行的命令的优先权等 级。等级的范围从-20~19,其中-20为最高,19为最低。
--help:在线帮助。
说明:应用程序优先权值的范围从-20~19,数字越小,优先权就越高。一般情况下,普通应用程序的优先权值(CPU使 用权值)都是0,如果让常用程序拥有较高的优先权等级,自然启动和运行速度都会快些。需要注意的是普通用户只能在0~19之间调整应用程序的优先权值,只 有超级用户有权调整更高的优先权值(从-20~19)。
应用实例如下。
将ls命令的优先序加1并执行,将结果输入文件1.txt:
# nice -n 1 ls >1.txt |
11.renice命令修改优先级
作用:renice命令允许用户修改一个正在运行的进程的优先权。
格式:renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]
主要选项如下。
priority:优先等级
-p pids:改变该程序的优先权等级,此参数为预设值。
-g pgrps:使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。
-u user:指定用户名称,修改所有隶属于该用户的程序的优先权。
说明:renice命令可重新调整正在执行的程序的优先权等级。默认是以程序识别码指定程序,调整其优先权,也可以指定程序群组或用户名称调整优先 权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20~19,只有超级用户可以改 变其他用户程序的优先权和设置负数等级。普通用户只能对自己所有的进程使用renice命令。
应用实例如下。
将进程PID为987及32的进程与进程拥有者为daemon及root的优先级别号加1:
#renice +1 987 -u daemon root -p 32 |
12.sleep命令暂停进程
作用:sleep命令的功能是使进程暂停执行一段时间。
格式:sleep number [选项]
主要选项如下。
number:时间长度,后面可接s、m、h或d。
s:以秒为单位。
m:以分钟为单位。
h:以小时为单位。
d:以天为单位。
说明:如果没有指定时间,以秒为单位。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间。
应用实例如下。
下面的命令使进程先暂停60秒,然后查看哪个用户登录到系统中:
#sleep 60; who |
13.nohup命令用户退出系统之后继续工作
作用:nohup命令确保执行程序能在用户退出系统之后继续工作。
格式:nohup命令
说明:一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如,用户正在下载一个很大的文 件,但是你因下班或有事需要先退出系统,希望退出系统时程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。同时这些进 程都在后台执行(命令放到后台运行,nohup必须与&操作同时使用),结果则会写到用户自己的目录下的nohup.out文件里。
应用实例如下。
程序在后台自动执行:
nohup wget -c -t0 http://www.bsdr.com/ghs1.rar & |
14.pgrep命令
作用:pgrep命令查找当前运行的进程,并列出匹配给定条件的进程的pid。所有的条件都必须匹配才会被列出。
使用权限:所有用户。
格式:Pgrep [选项][程序名]
选项如下。
-l:列出程序名和进程ID。
-o:进程起始的ID。
-n:进程终止的ID。
应用实例如下。
用户cao查看sshd的进程列表:
[cao@localhost@cao]$pgrep -l sshd
829 sshd
15.chkconfig命令设置系统的各种服务
作用:chkconfig命令检查,设置系统的各种服务。
格式:chkconfig [--add][--del][--list][系统服务]
或chkconfig [--level <等级代号>][系统服务][on/off/reset]
主要选项如下。
--add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
--level<等级代号>:指定读系统服务要在哪一个执行等级中开启或关毕。
说明:chkconfig提供了一个简单的命令行工具用于维护/etc/rc[0-6].d的路径层次,可以帮助系统管理员在 这些路径中直接操作符号行,chkconfig的执行是通过chkconfig命令激发的,此命令目前在irix操作系统中存在。甚至包括了维护/etc /rc[0-6].d层次之外的设置信息。chkconfig有5个不同的函数:为管理器添加新服务,从管理器中移出服务,列出当前启动的服务信息,改变 服务启动信息,检查特殊服务的启动状态。这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。
应用实例如下。
Chkconfig管理服务技巧
如果你使用chkconfig --list命令,你会看到一个系统服务列表,以及它们在运行级别0~6中已被启动(on)或停止(off)。在列表末端,你会看到由xinetd管理的 服务部分。如果你使用chkconfig--list来查询由xinetd管理的服务,你会看到xinetd服务是被启用(on)还是被关闭(off) 了。例如,命令chkconfig--list finger返回了下列输出:
finger on |
如上所示,finger作为xinetd服务被启用。如果xinetd在运行,finger就会被启用。
如果你使用chkconfig --list来查询/etc/rc.d中的服务,你会看到服务在每个运行级别中的设置。例如,命令chkconfig --list anacron返回了下列输出:
Anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
chkconfig 还能用来设置某一服务在某一指定的运行级别内被启动还是被停运。例如,要在运行级别3、4、5中停运nscd服务,使用下面的命令:
Chkconfig --level 345 nscd off |
补充说明:由xinetd管理的服务会立即被chkconfig影响。例如,如果 xinetd在运行,finger被禁用,那么执行了chkconfig finger on命令后,finger可以自动随xinetd的改变而自动启用。对其他服务的改变在使用chkconfig之后不会立即生效。你必须使用 service daemon stop命令来停止个别服务。在前面的例子中,把daemon换成你想停止的服务名称,如httpd。把stop换成start或restart来启动或 重新启动该服务。
4.4 总结
进程管理还是需要的,虽然在桌面应用上,我们点鼠标就能完成大多的工作,但在服 务器管理中,进程管理还是十分重要的。以上介绍的Linux下进程管理的命令都是比较重要的,通过这些命令可以对进程进行观察。进程运行需要占用 系统资源,一个进程如果占用大量资源会造成系统性能瓶颈现象。此时就需要进行进程调度,达到实时监控系 统和优化性能的目的。
你对每个进程了解得越多,就能够越容易地精确定位进程的问题所在。系统通常会因为某种原因遇到各种问题,比如速度变慢或者不稳定,而使用这些工具可 以帮助你提高找到问题所在的能力。