(013) Linux之进程
十年运维系列之基础篇 - Linux
作者:曾林
联系:1494445739@qq.com
版权:文章未经同意请勿转载
一、引言
现代操作系统通常都支持多重任务处理(multitasking)。多重任务处理是指系统通过快速切换运行中的程序来实现多任务的同时执行。Linux内核通过使用进程来管理多重任务。进程是Linux用来安排不同程序等待CPU调度的一种组织方式。
二、进程如何工作
系统启动时,内核先把它的一些程序初始化为进程,然后运行一个成为init的程序。init程序将依次运行一系列称为脚本初始化的shell脚本(放在/etc目录下),这些脚本将会启动所有的系统服务。其中的很多服务都是通过守护程序(daemon program)来实现的。而后台程序只是呆在后台做它们自己的事情,并且没有用户界面。因此,即使没有用户登录,系统也在忙于执行一些例行程序。
一个程序的运行可以触发其他程序的运行,在进程系统中这样的情况被表述为父进程创建子进程。
内核会保存每个进程的信息以便确保任务有序进行。比如,每个进程将被分配一个称为进程ID(PID)的号码。进程ID是按递增的顺序来分配的,init进程的PID始终为1。内核也记录分配给每个进程的内存信息以及用来恢复运行的进程就绪信息。和文件系统类似,进程系统中也存在所有者、用户ID、有效用户ID等。
三、使用ps命令查看进程信息
用来查看进程信息的命令中,使用最普遍的恐怕就是ps命令了。ps命令有很多的选项,其中最简单的使用格式如下所示:
默认情况下,ps命令输出的信息并不是很多,只是输出和当前终端会话相关的进程信息。为了获得更多的信息,我们需要添加一些选项,但是在介绍这个之前,让我们先来看看ps命令输出的其他字段信息。TTY是teletype(电传打印机)的缩写,在这里代表的是进程的控制终端。UNIX在这里也显示了进程的运行时间,TIME字段表示了进程消耗的CPU时间总和。可以看出,这两个进程都没有使得计算机变得忙碌。
下面我们在ps命令后面多加一个选项,那么我们将得到反映系统运行情况的更大视图界面,如下所示:
添加x选项(注意这里的选项并不加连字符)将告知ps命令显示所有的进程,而不需要关注它们是由哪个终端(如果有其他的情况)所控制的。TTY列中出现的“?”表示没有控制终端,使用这个选项可以查看所有进程的列表信息。
输出结果中添加了一个名为STAT的新列。STAT是state的缩写,显示的是进程的当前状态,如下表所示:
状态 | 含义 |
R | 运行状态。进程正在运行或者准备运行 |
S | 睡眠状态。线程不在运行,而是在等待某事情发生,如键盘输入或者收到网络报文 |
D | 不可中断的睡眠状态。进程在等待I/O操作,如硬盘驱动 |
T | 暂停状态。进程被指示暂停(后续还可以继续运行) |
Z | 无效或者“僵尸”进程。子进程被终止,但是还没有被其父进程彻底释放掉 |
< |
高优先级进程。进程可以被赋予更多的重要性,分配更多的CPU时间。进程的这一特性称为优先级(niceness)。高优先级的进程被说成较不友好,是因为它们将消耗更多的cpu和时间,这样留给其他进程的CPU时间就会变少 |
N | 低优先级进程。低优先级进程(友好进程,a nice process)只有在其他更高优先级的进程使用完处理器后才能够获得使用处理器的时间 |
这些进程状态的后面可以带其他的字符来表示不同的特殊进程特性。
另一个常用的选项组合是aux(不带前置连字符),它将输出更多的信息,如下所示:
该选项组合将会显示属于每个用户的进程信息,使用这些选项时不带前置连字符使得命令以“BSD模式”运行。使用该选项将显示更多的列信息。分别解释如下:
标题 | 含义 |
USER | 用户ID。表示该进程的所有者 |
%CPU | CPU使用百分比 |
%MEM | 内存使用百分比 |
VSZ | 虚拟内存耗用比 |
RSS | 实际使用的内存大小。进程使用的物理内存(RAM)大小 |
START | 进程开启的时间。如果数值超过24小时,那么将使用日期来显示 |