Linux进程显示与删除

Linux系统中,每个执行的任务都称为 进程(Process),例如使用ls命令浏览目录内容,或查询日期时间输入的date命令。同时,在每个进程 启动时, 系统 都会给它指定一个惟一的数值,这个数值就称为“进程ID”(Process ID,PID)。如果要针对某个进程进行管理,例如结束进程的执行,必须以进程ID(而不是该进程的名称)作为参考的对象。

每个进程都会存在一个对应的父进程(Parent Process),而由这个父进程可以复制多个子进程,这是网络程序编写时很常用的一种方式,这个动作就称为Fork,如图12-1所示。
12.1 Linux进程显示与删除(图一)
图12-1


最常见的一个Fork例子就是 Web服务器,Web服务器通常都可以支持多个客户端的连接,而服务器方面利用一个父进程来接受客户端的请求,然后利用Fork来产生一个子进程以处理后续的任务,之后该父进程就可再度回到等待客户端请求的状态,如此即可不断地为客户端服务。

前台与后台进程

每个进程都可能以两种方式存在:前台(Foreground)与后台(Background)。所谓前台进程,就是用户目前在 屏幕 上进行操作的进程;而后台进程则是实际上在操作,但由屏幕上并无法看到的进程。

通常使用后台方式执行的情况是,当此进程较为复杂且必须执行较长的 时间 时,我们会将它置于后台中执行,以避免占用屏幕的时间过久,而无法执行其他的进程。

系统的服务一般都是以后台进程的方式存在的,而且都会驻留在系统中,直到关机时才结束,这类服务我们也称为Daemon,在Linux系统中就包含许多Daemon。

判断Daemon最简单的方法就是由名称来判断,多数Daemon都是由服务名称加上d来产生的,例如 HTTP服务的Daemon为httpd。

显示 目前进程

ps命令是Process Status的缩写,它的功能是查看目前的系统中有哪些进程正在执行,以及它们的执 行情 况。您可以直接输入ps命令名称而不加任何参数。

如果直接执行ps命令,则会出现类似以下的信息:
[root@ns1 ~]# ps

PID TTY         TIME CMD

1635 pts/0    00:00:00 su

1636 pts/0    00:00:00 bash

1679 pts/0    00:00:00 ps
上述ps命令显示的数据共分为4个字段,它们的说明如下:

PID:进程标识(Process ID),系统即是凭着这个编号来识别及处理此进程的。

TTY:Teletypewriter,登录的终端机编号。

TIME:此进程所消耗的 CPU时间。

CMD:正在执行的命令或进程名称。

上述的信息是ps命令显示的最基本数据画面,其实ps支持非常多的参数。因为ps是非常常用的命令,所以本书在此将说明其中较为重要的参数的使用方法。

显示详细信息

如果需要更详细的系统数据,可以使用-l(Long)参数,它除了显示ps命令的4个基本字段数据外,另外还有10个额外数据可供查看,这些额外数据的内容及说明如下:
[root@ns1 ~]# ps -l

F S  UID   PID  PPID C PRI NI ADDR  SZ WCHAN TTY TIME   CMD

4 S    0  9822  9521 0  81  0    -  1220 wait4  pts/2 00:00:00  su

4 S    0  9970  9822 0  75  0    -  1294 wait4  pts/2 00:00:00b ash

4 R    0 15354  9970 0  80  0    -   788  -     pts/2 00:00:00  ps


F:该进程状态的标志(Flag),表12-1是较常用的标志及说明。

表12-1   进程状态标志说明

标 志 名 称 标 志 代 码 说      明

ALIGNWARN 001 打印警告信息

STARTING 002 进程正在初始化

EXITING 004 系统正在关机

PTRACED 010 表示已调用ptrace(0)

TRACESYS 020 跟踪System Call

FORKNOEXEC 040 已执行fork但没有执行exec

SUPERPRIV 100 以root身份执行

DUMPCORE 200 内核转储

SIGNALED 400 以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,表示进程或系统调用等待时的地址。

而另一种显示详细内容信息的参数为-u(User),它的主要 功能 是将进程数据以用户的格式来显示,以下是部分的示例内容以及新的字段说明:
[root@ns1 ~]# ps -u

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root  9822  0.0   0.0  4880 168 pts/2  S  16:20  0:00   [su]

root  9970  0.0   0.4  5176 872 pts/2  S  16:20  0:00   -bash

root 15448  0.0   0.3  2644 696 pts/2  R  18:30  0:00   ps -u

......

?%CPU:CPU使用率百分比。

?%MEM:内存使用率百分比。

?VSZ:占用的虚拟内存大小。

?RSS:占用的物理内存大小。

?START:进程开始时间。
显示后台进程

其实,系统中目前执行的进程绝不是只有输入ps命令时的数目,事实上有为数更多的进程以后台的方式来执行,它们一般都是系统的服务(Daemon),或是用户利用&来处理的进程。如果要查看这些后台进程,可以使用-x参数,以下是部分的示例内容:
[root@ns1 ~]# ps -x

PID   TTY STAT TIME  COMMAND

1   ? S 0:04      init [5]

2   ? SW 0:00      [keventd]

3   ? SW 0:00      [kapmd]

4   ? SWN 0:00      [ksoftirqd/0]

......
有经验的管理员一般都习惯一次查看所有用户执行的进程以及后台进程,此时可以使用-aux参数。

虽然-aux参数可以提供最详尽的信息,但是有时并不是很容易找出所需的信息,因此我们可配合使用grep命令,以缩小查看的范围。以下是找出与用户jack有关的进程及其内容的示例:
[root@ns1 ~]# ps -aux | grep jack

jack 2728  0.4  0.7  5164 1380 pts/0 S 08:18  0:00 -bash

root 2806  0.0  0.3  4444  644 pts/0 S 08:18  0:00 grep jack
....

结束执行中的进程

如果某个进程执行到一半时中断,或消耗太多的系统资源,例如内存数量及CPU时间,此时您可以考虑使用kill命令来将指定的信号传送到该进程。

虽然kill命令可以传送的信号有很多种,但以SIGTERM(15)或SIGKILL(9)居多,它们都是用来结束进程执行的。您可以使用-l参数来查看所有可供传送的信号,如图12-2所示。
12.1 Linux进程显示与删除(图二)
图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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值