一、查看进程
1.程序
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码
2.进程
程序动态执行的一次过程
动态执行的代码
父、子进程:每个程序可以创建一个或多个进程
3.进程特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的
并发性:任何进程都可以资源分配和调度的一个独立单位
独立性:进程是系统进行资源分配和调度的一个独立单位
结构性:进程由程序、数据和进程控制块三部分组成
线程
是进程的一个实体,更加轻量级
操作系统能够进行运算调度的最小单位
一个进程可以有很多线程,每条线程并行执行不同的任务
进程和线程的区别
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
进程之间相互独立,但同一进程的各个进程之间共享程序的内存空间
调度和切换:线程上下文切换比进程上下文切换要快得多
图:Windows的进程和线程,可以在资源管理器中查看
图:Windows的进程和线程,可以在资源管理器中查看
图:Linux查看进程和线程
图:/proc目录
图:查看某个进程的线程个数
二、进程管理的相关命令
2.1查看进程
2.1.1 ps命令 – 显示进程状态
ps命令是“process status”的缩写,ps命令用于显示当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序
支持三种选项:
UNIX选项 如: -A -e
GNU选项 如: --help
BSD选项 如: a
“ps aux” 可以查看系统中所有的进程;
“ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
“ps -l” 只能看到当前 Shell 产生的进程;
常用选项:
a | 显示当前终端下的所有进程信息,包括其他用户的进程 |
u | 使用以用户为主的格式输出进程信息 |
x | 显示当前用户在所有终端下的进程信息 |
-e | 显示系统内的所有进程信息 |
-l | 使用长格式显示进程信息 |
-f | 使用完整的格式显示进程信息 |
–sort 属性 | 对属性排序,属性前加-表示倒序 |
示例1:
表头 | 含义 |
USER | 该进程是由哪个用户产生的 |
PID | 进程的ID |
%CPU | 该进程占用CPU资源的百分比,占用的百分比越高,进程越消耗资源 |
%MEM | 该进程占用物理 内存的百分比,占用的百分比越高,进程越消耗资源 |
VSZ | 该进程占用虚拟内存的大小,单位为KB |
RSS | 该进程占用实际物理内存的大小,单位为KB |
TYY | 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。 pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。 |
STAT | 进程状态 -X:死掉的进程(不会出现) -Z:僵尸进程,进程已经中止,但还在占用硬件资源 -<:高优先级 -N:低优先级 -L:被锁入内存 -s:包含子进程 -l:多线程 -+:位于后台 |
START | 该进程的启动时间 |
TIME | 该进程占用CPU的运算的时间 |
COMMAND | 产生此进程的命令名 |
示例2:
示例3:
表头 | 含义 |
F | 进程标志,说明进程的权限,常见的标志有两个: 1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限; |
S | 进程状态。具体的状态和"psaux"命令中的 STAT 状态一致; |
UID | 运行此进程的用户的 ID; |
PID | 进程的 ID; |
PPID | 父进程的 ID; |
C | 该进程的 CPU 使用率,单位是百分比; |
PRI | 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;系统定义不可以人为修改 |
NI | 进程的优先级,数值越小,该进程越早被执行;可以人为修改 |
ADDR | 该进程在内存的哪个位置; |
SZ | 该进程占用多大内存; |
WCHAN | 该进程是否运行。"-"代表正在运行; |
TTY | 该进程由哪个终端产生; |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间; |
CMD | 产生此进程的命令名; |
注:
PRI(priority):系统定义,不能设置
NI(nice):可以人为设置
修改 NI 值时有几个注意事项:
NI 范围是 -20~19。
普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。
越小优先级越高
示例4:
2.1.2 top命令
ps命令可以一次性给出当前系统中进程状态,但是得到的信息缺乏失效性,为此我们使用top命令可以动态地持续监听进程的运行状态, 常用于服务端性能分析。
**语法格式:**top [参数]
常用参数:
-d | 改变显示的更新速度,默认3秒 |
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式 |
-s | 安全模式,将交谈式指令取消, 避免潜在的危机 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的行程 |
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内 |
交互操作:
?或h | 显示交互模式的帮助 |
c | 按照cpu的使用率排序,默认就是此选项 |
M | 按照内存的使用率排序 |
N | 按照PID排序 |
T | 按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序 |
k | 按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号 |
r | 按照 PID 给某个进程重设优先级(Nice)值 |
q | 退出top命令 |
示例1:
第一部分
第一行为任务队列信息
内 容 | 说 明 |
23:16:21 | 系统当前时间 |
up 13:06 | 系统的运行时间.本机己经运行13 小时 6 分钟 |
2 users | 当前登录了两个用户(本地登录和终端远程各有一个) |
load average: 0.00,0.01,0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数) |
第二行为进程信息
内 容 | 说 明 |
Tasks: 140 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
139 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行为 CPU 信息
内 容 | 说 明 |
Cpu(s): 0.0%us | 用户模式占用的 CPU 百分比 |
0.4%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.9%id | 空闲 CPU 占用的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.0%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
第四行为物理内存信息
内 容 | 说 明 |
Mem: 1867024total | 物理内存的总量,单位为KB |
317032used | 己经使用的物理内存数量 |
844308 free | 空闲的物理内存数量 |
705684 buff/cache | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息
内 容 | 说 明 |
Swap: 4194300 total | 交换分区(虚拟内存)的总大小 |
O used | 已经使用的交换分区的大小 |
4194300 free | 空闲交换分区的大小 |
1341324 avail Mem | 可用内存的大小 |
缓冲(buffer)和缓存(cache)的区别:
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
第二部分
第二部分主要是系统进程信息
字段 | 含义 |
PID | 进程的ID |
USER | 该进程所属的用户 |
PR | 优先级,数值越小,优先级越高 |
NI | 优先级,数值越小、优先级越高 |
VIRT | 该进程使用的虚拟内存的大小,单位为 KB |
RES | 该进程使用的物理内存的大小,单位为 KB |
SHR | 共享内存大小,单位为 KB |
S | 进程状态 |
%CPU | 该进程占用 CPU 的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程共占用的 CPU 时间 |
COMMAND | 进程的命令名 |