文章目录
一、进程理解
- 含义
• 程序(procedure)是静态的文件。
• 进程(process)是运行中的程序的一个副本。
• 进程存在生命周期——准备期、运行期、终止期。
准备期:把代码缓存到系统硬件中;
运行期:就是工作时期;
终止期:工作完成后,系统回收所占用的系统资源。
• 线程(thread)被包含在进程之中,是进程中的实际运作单位,是进程运行的最小单位。进程是资源调配的最小单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 - 特性
• 动态性:进程的实质是一次程序执行的过程,有创建、撤销等状态的变化。而程序是一个静态的实体。
• 并发性:进程可以做到在一个时间段内,有多个程序在运行中。程序只是静态的实体,所以不存在并发性。
• 独立性:进程可以独立分配资源,独立地运行。
• 异步性:进程以不可预知的速度向前推进。
• 结构性:进程拥有代码段、数据段、PCB(进程控制块,进程存在的唯一标志)。也正是因为有结构性,进程才可以做到独立地运行。 - 状态:R、S、D、T、Z
状态 | 定义 | 解释 |
---|---|---|
R(TASK_RUNNING) | 可执行状态(RUNNING,READY) | 正在运行的,等待CPU处理后就可以运行的准备状态 |
S(TASK_INTERRUPTIBLE) | 可唤醒睡眠状态 | 休眠的进程随时可被唤醒 |
D (TASK_UNINTERRUPTIBLE) | 不可唤醒睡眠状态 | 休眠的进程不能被唤醒,只能等到资源条件后满足自然唤醒 |
T(TASK_STOPPED) | 暂停状态 | 用户调整的,需要指令唤醒 |
z( EXIT_ZOMBIE) | 僵死态 | 孤儿进程,已经停止的进程资源没有被回收,会影响系统性能 |
二、进程查看
1.pstree
作用:查看进程树,把进程用树型结构显示出来
systemd:守护进程,对子进程进行初始化,在系统开启时自动打开。
2. ps
作用:显示当前命令执行时进程状态
全称:report a snapshot of the current processes.
2.1 格式
- UNIX options:Linux操作系统中,命令参数之前带“-”
- BSD options:BSD操作系统中,命令参数之前不带“-”
- GNU long options:图形格式
2.2 ps命令
命令 | 作用 |
---|---|
ps a | 显示与终端相关进程(BSD) |
ps x | 显示所有与终端无关进程(BSD) |
ps u | 以用户为归类来显示进程状态信息(BSD) |
ps f | 层级结构显示进程信息 |
ps o | 指定查看选项,pid,comm,nice,pri,pcpu,stat,ppid |
ps -e | 显示所有进程(uinx) |
ps -f | 显示完整格式信息(unix) |
ps -H | 层级结构显示进程的相关信息 |
ps -o | 指定查看选项,pid,comm,nice,%cpu,%mem,nice |
常用组合命令:
1. ps aux #查看系统中所有进程的信息
2. ps -e -f #显示所有进程的完整信息
PPID :父级进程id
C:CPU用量
STIM:进程开启时间,运行时间
TIME:CPU处理进程的时间
3. ps axo pid,comm,nice,… #查看进程中的指定项信息(BSD)
ps -eo pid,comm,nice,stat,… #查看进程中的指定项信息(UNIX)
4. 对当前程序的某些资源排序
ps axo pid,comm,%cpu - -sort=%cpu #按CPU用量正向排序
ps axo pid,comm,%cpu - -sort=-%cpu #按CPU用量逆向排序
ps axo pid,comm,%cpu --sort=-%cpu | head -n 5 #显示CPU用量前4的进程
2.3 PS命令显示信息
字段 | 含义 |
---|---|
USER | 用户名称 |
PID | 进程id |
%CPU | cpu用量百分比 |
%MEM | 内存用量百分比 |
VSZ | 占用虚拟内存大小 |
RSS | 常驻内存集大小 |
TTY | 字符终端 |
STAT | 进程状态 |
START | 运行时间 |
TIME | 占用cpu时间 |
COMMAND | 进程名称 |
3. pgrep
作用:显示指定信息进程
命令 | 作用 |
---|---|
pgrep -u uid | 显示指定用户进程 |
pgrep -U name | 显示指定用户进程 |
pgrep -t tty | 显示指定终端进程 |
pgrep -l | 显示进程名称 |
pgrep -a | 显示完整格式进程名 |
pgrep -P pid | 显示指定进程的子进程 |
示例:(1) 显示用户id是1000的进程
(2) 显示(用户id是1000=用户名是student)的进程并显示进程名称
(3) 显示终端是pts/1的进程及名称
(4) 显示终端是pts/1的进程及完整格式名称
(5) 显示14476进程的子进程
4. pidof
作用:根据进程名称获取pid
5. top
作用:实时显示进程,默认三秒钟刷新显示一次
5.1 显示进程信息详解
前五行统计信息详解
字符 | 含义 |
---|---|
top | 系统当期时间 |
up | 系统运行时常 |
user | 登录当前系统的用户数量 |
load average | 平均负载1分钟 5分钟 15 分钟的队列长度(uptime) |
task | 任务 |
%cpu | cpu占用百分比 |
%mem | 物理内存 |
swap | 交换分区占用 |
说明:(1)us 用户空间; sy 内核空间;ni nice调整时间;id 空闲时间;wa 等待io
hi 处理硬件中断;si 处理软件中断;st 被虚拟化程序占用的百分比
(2)buff 等待写入磁盘的数据;cache 从磁盘中读取的数据
进程详细信息
字符 | 含义 |
---|---|
PID | 进程id |
USER | 用户名称 |
PR | 优先级 |
NI | nice值 |
VIRT | 虚拟内存 |
RES | 常住内存地址 |
SHR | 共享资源 |
S | 状态 |
%CPU | CPU用量 |
%MEM | 内存用量 |
TIME+ | 占用CPU时间 |
COMMAND | 进程名称 |
5.2 内部参数
按键 | 作用 |
---|---|
P | cpu百分比排序 |
M | 内存百分比 |
T | 累计占用cpu时间 |
l | 开启/关掉uptime(系统负载)信息 |
t | 开启/关闭task&cpu信息 |
s | 调整刷新频率 |
k | 终止进程 |
u | 查看指定用户进程 |
设定刷新频率为一秒刷新一次
输入PID就可终止进程
查看指定student用户进程
5.3 命令参数
top -d #指定刷新间隔
top -b #以批次方式显示
top -n #显示批次数量
top -d 1 #指定一秒刷新一次
top -b -d1 #一秒显示一次,分批次不断刷新
top -b -d1 -n 2 #一秒显示一次,分两次刷新完成
三、进程优先级
- 优先级的含义:进程优先被系统资源处理
- 优先级的调整:普通用户的优先级只能下降不能提升;超级用户可以随意调整。
1 按照资源占用划分进程类型
资源使用量 | 进程类型 | 举例 |
---|---|---|
cpu使用密集 | CPU-Bound | 计算量大,例如:视频处理,图像处理 |
I/O使用密集 | I/O-Bound | 例如:编辑器,交互使用 |
2 优先级范围
对Linux而言优先级被划分成固定个数 (0-139),140个队列
1-99为实时有优先级,数字越大优先级越高,不能手动干预,系统自用
100-139为静态优先级,数字越小优先级越高,可以人为调整
3 NICE值
nice值用来调整优先级的数
- NICE值:-20~19对应静态优先级 (100-139)
- 普通用户只可以调低优先级,超级用户任意调整
- 关于优先级的命令
(1) reince –n 优先级 程序pid #调整进程优先级
(2) nice –n 优先级 程序 #开启进程时调整指定进程优先级
四、进程前后台调用
指令 | 含义 |
---|---|
jobs | 查看后台任务 |
ctrl+z | 将前台运行进程打入后台,并挂起暂停 |
bg | 激活后台进程 |
fg | 调回进程 |
& | 运行在后台,不占用终端 |
对于不能在后台运行,必须占用终端的进程,需要使用fg调回前台运行
五、信号
信号:进程和内核进行沟通时使用的语言
1. 可控信号类型
man 7 signal #查看信号级别
可控信号 | 含义 |
---|---|
1 | 刷新(给进程重新加载配置,不用关闭进程) |
2 | 中断键盘输入 |
3 | 退出键盘 |
9 | 强制结束(不会被阻塞) |
15 | 正常关闭(有可能会被阻塞) |
18 | 激活进程 |
19 | 强制暂停(不会被阻塞) |
20 | 正常暂停(可能会被阻塞) |
2. 信号指令
kill 信号 pid
killall 信号 信号名称
pkill 条件(条件可用–help查看)