前台与后台进程
每个进程都可能以两种方式存在:前台(Foreground)与后台(Background)。所谓前台进程,就是用户目前在屏幕上进行操作的进程;而后台进程则是实际上在操作,但由屏幕上并无法看到的进程。
通常使用后台方式执行的情况是,当此进程较为复杂且必须执行较长的时间时,我们会将它置于后台中执行,以避免占用屏幕的时间过久,而无法执行其他的进程。
系统的服务一般都是以后台进程的方式存在的 ,而且都会驻留在系统中,直到关机时才结束,这类服务我们也称为 Daemon ,在Linux系统中就包含许多Daemon。
判断Daemon 最简单的方法就是由名称来判断,多数Daemon都是由 服务名称加上d来产生的 ,例如HTTP服务的Daemon为httpd。
显示目前进程 ps
ps命令是Process Status的缩写,它的功能是查看目前的系统中有哪些进程正在执行,以及它们的执行情况。您可以直接输入ps命令名称而不加任何参数。
如果直接执行ps命令,则会出现类似以下的信息:
[root@ns1 ~]# ps
|
上述ps命令显示的数据共分为4个字段,它们的说明如下:
PID:进程标识(Process ID),系统即是凭着这个编号来识别及处理此进程的。
TTY:Teletypewriter,登录的终端机编号。
TIME:此进程所消耗的CPU时间。
CMD:正在执行的命令或进程名称。
上述的信息是ps命令显示的最基本数据画面,其实ps支持非常多的参数。因为ps是非常常用的命令,所以本书在此将说明其中较为重要的参数的使用方法。
显示详细信息 ps -l
如果需要更详细的系统数据,可以使用-l(Long)参数,它除了显示ps命令的4个基本字段数据外,另外还有10个额外数据可供查看,这些额外数据的内容及说明如下:
[root@ns1 ~]# ps -l
|
F :该进程状态的标志(Flag),表12-1是较常用的标志及说明。
表12-1 进程状态标志说明
标 志 名 称标 志 代 码说 明
ALIGNWARN001打印警告信息
STARTING002进程正在初始化
EXITING004系统正在关机
PTRACED010表示已调用ptrace(0)
TRACESYS020跟踪System Call
FORKNOEXEC040已执行fork但没有执行exec
SUPERPRIV100以root身份执行
DUMPCORE200内核转储
SIGNALED400以Signal结束进程
S :进程状态代码(Process State Codes),可用的代码及说明如表12-2所示。
表12-2 进程状态代码说明
代码说明
D不可中断的闲置状态(Uninterruptible Sleep)
R可执行的
S闲置状态
(续)
代码说明
T跟踪或停止
Z已死亡的进程(Zombie)
W没有足够的内存页可分配
<高优先级的进程
N低优先级的进程
L有内存页分配并锁在内存内
UID :进程执行者的ID(User ID)。
PPID :父进程标识(Parent Process ID)。
PRI :进程执行的优先级(Priority)。
NI :nice,是指进程执行优先级的nice值,负值表示其优先级较高。
SZ :Size,进程所占用的内存大小,以KB为单位。
WCHAN :Waiting Channel,表示进程或系统调用等待时的地址。
ps -u
另一种显示详细内容信息的参数为-u(User),它的主要功能是将进程数据以用户的格式来显示,以下是部分的示例内容以及新的字段说明:
[root@ns1 ~]# ps -u
|
显示后台进程 ps -x
其实,系统中目前执行的进程绝不是只有输入ps命令时的数目,事实上有为数更多的进程以后台的方式来执行,它们一般都是系统的服务(Daemon),或是用户利用&来处理的进程。如果要查看这些后台进程,可以使用-x参数,以下是部分的示例内容:
[root@ns1 ~]# ps -x
|
有经验的管理员一般都习惯一次查看所有用户执行的进程以及后台进程,此时可以使用-aux参数。
虽然 -aux参数可以提供最详尽的信息,但是有时并不是很容易找出所需的信息,因此我们可 配合使用grep命令,以缩小查看的范围。以下是找出与用户jack有关的进程及其内容的示例:
[root@ns1 ~]# ps -aux | grep jack
|
....
结束执行中的进程
如果某个进程执行到一半时中断,或消耗太多的系统资源,例如内存数量及CPU时间,此时您可以考虑使用kill命令来将指定的信号传送到该进程。
虽然kill命令可以传送的信号有很多种,但以SIGTERM(15)或SIGKILL(9)居多,它们都是用来结束进程执行的。您可以使用-l参数来查看所有可供传送的信号,如图12-2所示。
图12-2 kill命令可传送的信号 |
因为kill命令在使用时必须通过进程ID来指定信号的接收进程,所以需先以ps命令来得知要传送的PID,之后再使用kill命令加上指定的PID来送出终止信号以结束进程。
以下示例假设要终止PID 16525进程的执行:
[root@ns1 ~]# kill 16525
因为有些进程会捕捉某些信号,所以当直接指定PID无法终止其进程时,您可以使用-9参数,它代表送出SIGKILL信号。
[root@ns1 ~]# kill -9 16525
如果使用-9参数仍无法结束该进程,还可以尝试使用-15参数来送出SIGTERM信号;如果连-15参数都无法成功地删除此进程,则只有重新启动这一方法了。
通常,极难删除的进程大多与系统运行有关联,如果删除后可能会影响系统的性能或执行,因此最好不要养成直接使用-9和-15参数的习惯。
[root@ns1 ~]# kill -15 16525
kill命令另外一个常用的时机是,当对某个Daemon进行修改或设置后,您可以使用-HUP(Hang Up)参数来重新启动该进程,这可减少重新启动计算机的时间。
[root@ns1 ~]# kill -HUP 16525
本文为张军原创文章,转载无需和我联系,但请注明来自张军的军军小站,个人博客http://www.zhangjunbk.com