Linux 进程管理控制
【top 工具】
top 是一个在前台执行的程序,通过交互界面可以实时的获取到进程的状态与系统的信息,在交互界面中可以通过一些指令来操作和筛选。
常用的交互命令有:
q | 退出程序 |
I | 切换显示平均负载和启动时间的信息 |
P | 根据 CPU 使用百分比大小进行排序 |
M | 根据驻留内存大小进行排序 |
i | 开关式命令,忽略闲置和僵死的进程 |
k |
终止一个进程,系统提示输入 PID 及发送的信号值。 一般终止进程用 15 信号,不能正常结束则使用 9 信号。 (安全模式下该命令被屏蔽) |
运行 top 后进入如下界面
1)top 中的第一行数据
top | 当前程序的名称 |
18:50:24 | 当前的系统时间 |
up 6 mins | 该机器已经启动了多长时间 |
1 user | 当前系统中用户数量 |
load average: 0.43,0.84,0.47 | 对应第 1、5、15 分钟内 cpu 的平均负载 |
说明:关于 load average
① load average 是对当前 CPU 工作量的度量,是与等待 CPU 的平均进程数相关的一个计算值,也就是运行队列的平均长度。
② 假设我们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把 CPU 任务比作汽车,则:
当 load = 0 时,意味着这个桥上并没有车,cpu 没有任何任务;
当 load < 1 时,意味着桥上的车并不多,一切都还是很流畅的,cpu 的任务并不多,资源还很充足;
当 load = 1 时,意味着桥已经被车给占满了,没有一点空隙,cpu 的已经在全力工作,系统资源都被用完了,但还在能力范围之内,只是有点慢而已;
当 load > 1 时,意味着不仅是桥上已经被车占满了,连桥外也被占满了,cpu 已经在全力的工作,系统资源都被用完了,但是还是有大量的进程在请求,在等待运行。
这是单个 CPU 单核的情况,而实际生活中我们需要将得到的这个值除以我们的核数来看。
③ load 的临界值一般为 1 ,但在实际中,有经验的运维或者系统管理员会将临界值定为 0.7。
当 load < 0.7 时,并不会去关注他;
当 0.7< load < 1 时,就需要稍微关注,此时虽然还可以应付,但是这个值已经离临界不远了;
当 load = 1 时,就需要警惕,此时已经没有更多的资源,cpu 已经在全力以赴了;
当 load > 5 时,系统已经快不行了,这个时候就需要系统管理员加班解决问题了
④ 通常来说,我们都会先看 15 分钟的值来看这个大体的趋势,然后再看 5 分钟的值对比来看是否有下降的趋势。
2)top 中的第二行数据
第二行数据,是进程的一个情况统计
Tasks: 245 total | 进程总数 |
1 running | 正在运行的进程数 |
244 sleeping | 睡眠的进程数 |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
3)top 中的第三行数据
第三行数据,是对 CPU 的使用情况的统计
5.3 us | 用户空间进程占用 CPU 百分比 |
3.9 sy | 内核空间运行占用 CPU 百分比 |
0.0 ni | 用户进程空间内改变过优先级的进程占用 CPU 百分比 |
90.8 id | 空闲 CPU 百分比 |
0.0 wa | 等待输入输出的 CPU 时间百分比 |
0.0 hi | 硬中断(Hardware IRQ)占用 CPU 的百分比 |
0.0 si | 软中断(Software IRQ)占用 CPU 的百分比 |
0.0 st | Steal time,虚拟服务中,虚拟 CPU 等待实际 CPU 的时间的百分比 |
CPU 利用率是对一个时间段内 CPU 使用状况的统计,通过这个指标可以看出在某一个时间段内 CPU 被占用的情况,而 Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率状况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数情况统计信息,这两个指标并不一样。
4)top 中的第四行数据
第四行数据,是对内存的使用情况的统计
3926.1 total | 物理内存总量 |
2004.8 used | 使用的物理内存总量 |
1174.1 free | 空闲内存总量 |
747.1 buff/cache | 用作内核缓存的内存量 |
系统中可用的物理内存最大值并不是 free 这个单一的值,而是 free + buffers + swap 中的 cached 的和。
5)top 中的第五行数据
第五行数据,是对交换区的使用情况的统计
4094.0 total | 交换区总量 |
4094.0 used | 使用的交换区总量 |
0.0 free | 空闲交换区总量 |
2494.0 avail Mem | 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖 |
6)top 中的第六行至结尾
从第六行到结尾,每一行都是一个进程的情况
PID | 进程 id |
USER | 进程的所属用户 |
PR | 进程执行的优先级 priority 值 |
NI | 进程的 nice 值 |
VIRT | 进程任务所使用的虚拟内存的总数 |
RES | 进程所使用的物理(驻留)内存数 |
SHR | 进程共享内存的大小 |
S | 进程的进程的状态 |
%CPU | 进程 CPU 的利用率 |
%MEM | 进程内存的利用率 |
TIME+ | 进程活跃的总时间 |
COMMAND | 进程运行的名字 |
说明
① NICE 值叫做静态优先级,是用户空间的一个优先级值。其值越小,进程优先级越高;值越大,进程优先级越低。
NICE 值的取值范围是 -20 to +19, 默认值为 0,-20 优先级最高,19 优先级最低。
② PR 值叫做动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个叫做 MAX_PRIO 的宏定义的,它的值为 140。其值越小,进程优先级越高;值越大,进程优先级越低。
Linux 实际上实现了 140 个优先级范围,取值范围是从 0 - 139,而这其中,0 - 99 是实时进程的值,100 - 139 是给用户的。
100 - 139 的值部分,有这么一个对应:PR = 20 + (-20 to +19),这里的 -20 to +19 便是 NICE 值。
因此,NICE 值与 PR 值虽然都是优先级,而且有着千丝万缕的关系,但是他们的值、作用范围并不相同。
③ VIRT 表示进程任务所使用的虚拟内存的总数,其中包含所有的代码,数据,共享库、被换出 swap 空间的页面等所占据空间的总数。
【进程的优先控制】
进程的优先执行顺序是根据该进程的优先级值来判定进程调度的优先级,而优先级的值就是上文所提到的 PR 值与 NICE 值来控制、体现的。
NICE 的值可以通过 nice 命令来修改的,而需要注意的是 nice 值可以调整的范围是 -20 ~ 19,其中 root 用户有着最高权限,既可以调整自己的进程也可以调整其他用户的程序,并且是所有的值都可以用,而普通用户只可以调整属于自己的进程,并且其使用的范围只能是 0 ~ 19,这是系统为了避免一般用户抢占系统资源而设置的一个限制。
nice 命令格式:nice -n 优先级数值 要调整的进程
实例:打开一个程序放在后台,调整优先级后用 ps 命令查看
【ps 命令】
1.ps 命令,是最基本最强大的进程查看命令,可以确定正在运行的进程、运行的状态、进程是否结束、哪些进程占用了过多的资源等。
2.命令格式:ps [选项]
3.常用选项
a | 显示现行终端机下的所有程序,包括其他用户的程序 |
-a | 显示所有终端机下执行的程序,除了阶段作业领导者之外 |
u | 以用户为主的格式来显示程序状况 |
x | 显示所有程序,不以终端机来区分 |
f | 用ASCII字符显示树状结构,表达程序间的相互关系 |
j/-j | 采用工作控制的格式显示程序状况 |
l/-l | 采用详细的格式来显示程序状况 |
-o | 自定义所需要的显示 |
4.输出内容说明
F | 进程的标志 |
USER | 进程的拥有用户 |
PID | 进程的 ID |
PPID | 其父进程的 PID |
SID | 会话的 ID |
TPGID | 前台进程组的 ID |
%CPU | 进程占用的 CPU 百分比 |
%MEM | 占用内存的百分比 |
NI | 进程的 NICE 值 |
VSZ | 进程使用虚拟内存大小 |
RSS | 驻留内存中页的大小 |
TTY | 终端 ID |
S/STAT | 进程状态 |
WCHAN | 正在等待的进程资源 |
START | 启动进程的时间 |
TIME | 进程消耗CPU的时间 |
COMMAND | 命令的名称和参数 |
注:
① F(Flags)栏,当值为 1 时,表示此子程序仅是 fork() 但没有执行 exec();当值为 4 时,表示此程序使用超级管理员 root 权限
② TPGID 栏写着 -1 的都是没有控制终端的进程,即守护进程
③ S/STAT 栏表示进程的状态,常见状态如下
R | Running.运行中 |
S | Interruptible Sleep.等待调用 |
D | Uninterruptible Sleep.不可中断睡眠 |
T | Stoped.暂停或者跟踪状态 |
X | Dead.即将被撤销 |
Z | Zombie.僵尸进程 |
W | Paging.内存交换 |
N | 优先级低的进程 |
< | 优先级高的进程 |
s | 进程的领导者 |
L | 锁定状态 |
l | 多线程状态 |
+ | 前台进程 |
5.常用查询命令
1)罗列出所有的进程信息:ps aux
2)查找某个进程,还可以配合 grep 与正则表达式一起使用:ps | grep 进程名
3)将连同部分的进程呈树状显示出来:ps axjf
4)自定义所需要的显示:ps -afxo user,ppid,pid,pgid,command...
【pgrep 命令】
1.作用:以名称为依据从运行进程队列中查找进程,并显示查找到的进程 pid,一般用来判断程序是否正在运行。
2.命令格式:pgrep [选项] 进程名
注:pgrep 命令支持 grep 命令的匹配模式
3.常见选项:
-o | 仅显示找到的最小(起始)进程号 |
-n | 仅显示找到的最大(结束)进程号 |
-l | 显示进程名称 |
-P | 指定父进程号 |
-g | 指定进程组 |
-t | 指定开启进程的终端 |
-u | 指定进程的有效用户ID |
4.实例:
【pstree 命令】
1.作用:直接的看到相同的进程数量,最主要的还可以看到所有进程之间的相关性。
2.命令格式:pstree [选项]
3.常见选项:
-a | 显示完整指令 |
-p | 显示PID |
-u | 显示用户名称 |
-n | 以程序识别码排序(默认是以程序名称排序) |
4.实例:
Linux 进程管理控制相关推荐
- Linux 进程及进程之间的通信机制——管道
参考: LInux C编程从初学到精通 电子工业出版社 Linux 进程 Linux 进程简介 Linux是一个多用户多任务的操作系统,多用户是指多个用户可以在同一时间使用同一台计算机系统:多用户是指 ...
- Linux进程与线程的区别 详细总结(面试经验总结)
首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...
- Linux进程编程基础介绍
Linux系统是一个多进程的系统,它的进程之间具有并行性.互不干扰等特点.也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任.其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发 ...
- Linux进程ID号--Linux进程的管理与调度(三)
进程ID概述 进程ID类型 要想了解内核如何来组织和管理进程ID,先要知道进程ID的类型: 内核中进程ID的类型用pid_type来描述,它被定义在include/linux/pid.h中 enum ...
- Linux 进程必知必会
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 只是简单的描述了一下 Linux 基本概念,通过几个例子来 ...
- Linux进程管理 (7)实时调度
关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...
- Linux进程及进程管理命令
Linux进程基础 1进程概念 1.1程序与进程 1.2进程的状态 1.3线程 1.4进程生命周期 1.5虚拟内存 2进程管理工具 2.1pstree 2.2ps 2.3pgrep 2.4kill.p ...
- Linux进程查看与管理
Linux进程查看与管理(2) htop: 交互式命令: u: 过滤 s:跟踪选用的进程所发起系统调用 l:显示选定进程所打开的文件 t:显示进程的层次数 a:设定进程的cpu亲缘性:(将选定的进程绑 ...
- Linux进程的Uninterruptible sleep(D)状态
Linux系统进程状态: PROCESS STATE CODES Here are the different values that the s, stat and state output spe ...
最新文章
- KNN学习之图像分类与KNN原理
- 禁用引导模态区域之外的单击以关闭模态
- Linux中cat、more、less、tail、head命令的使用示例
- HTTP协议之http状态码详解
- CRM Fiori:Complex note optimization design
- spikingjelly的20201221版本跑通ANN2SNN
- 机器学习实战(MachineLearinginAction) 第三章 决策树
- delete语句与reference约束冲突怎么解决_一条简单的更新语句,MySQL是如何加锁的?...
- 深入解密来自未来的缓存-Caffeine
- 使用visual studio code 编写小程序代码
- KEmulator 屏蔽内存查看器功能
- ISO 27001解读(一)管理思路
- excel服务器正在配置文件,excel2007取消正在配置进度的方法
- 电脑上的字体安装教程
- SLAM数据集(tum/kitti)轨迹对齐与结果评估
- 一个很好用的Venn图在线编辑网站
- 彩色图片和深度图片生成点云文件
- 实时时钟DS1302实验
- Epson机械手简单实例编程
- MySQL面试题——聚簇索引和非聚簇索引