一.进程介绍
1.进程
- 程序: 存放代码的文件(静态概念)
- 进程: 程序运行的过程(动态概念)
- 同一个程序可能对应多个进程
- 父进程: 程序运行时产生的第一个进程
- 子进程: 由父进程衍生出来的进程(比如在bash里再开一个bash)
- 如果父进程终止,子进程也会随之终止
- 进程是操作系统最核心的概念
2.并行与并发
- 并发: 多个任务看起来是同时运行的
- 并行: 多个任务真正的同时运行(只有多核再能实现并行)
3.线程
- 线程是进程内代码执行的过程
- 线程才是CPU上的执行单位
- 一个进程至少有一个线程
- 强调:CPU只做代码的运行,而不涉及I/O操作
4.任务三种状态
- 运行态
- 就绪态
- 阻塞态
- 不是阻塞态就是非阻塞态
5.提交任务的两种方式
- 同步
同步是指发送方发送数据后, 等接收方发回响应后才发下一个数据报的通讯方式
- 异步
异步是指发送方发出数据后, 不等接收方发回响应, 接着就发下个数据包的通讯方式
- 例子
1.快递小哥给你送快递,如果他打电话叫你过来拿,他在那里等你,等你从他手上把快递拿走了他才去送别人的快递,这个就称之为同步
2.快递小哥把你快递放在丰巢柜或者驿站,然后打个打电话或者发个信息告诉你快递到了让你自己去拿,然后小哥去干别的事了,这个就是异步(效率更高一点)
二.进程信息的查看
1.ps aux 组合命令,查看进程信息
-a | 显示一个终端的所有进程 |
---|---|
-u | 选择有效的用户ID或者是用户名 |
-x | 显示没有控制终端的进程,同时显示各个命令的具体路径 |
2.命令显示结果
3.首行信息代表含义
USER | 运行进程的用户 |
---|---|
PID | 进程运行的ID号 |
%CPU | 进程占用CPU百分比 |
%MEM | 进程占用内存百分比 |
VSZ | 进程占用虚拟内存的大小(单位: KB) |
RSS | 进程占用物理内存的实际大小(单位: KB) |
TTY | 进程运行的终端(tty1, pts/0虚拟终端等) |
STAT | 进程运行过程中的状态(R S D T Z X < N s + l |) "man"查询 |
START | 进程启动时间 |
TIME | 进程占用CPU的总时间("0"表示还没有超过"1"秒) |
COMMAND | 程序运行指令,有[ ]代表内核态进程,没有[ ]代表用户态进程 |
-
VSZ : 是指已分配的线性空间大小, 这个大小通常并不等于程序实际用到的内存大小,(内存映射, 共享的动态库, 或向系统申请了更多的堆都会扩大线性空间)
-
RSS : 常驻内存大小, 即进程实际占用的物理内存大小
-
STAT进程状态
R | 进程运行 |
---|---|
S | 可中断睡眠(sleep),执行I/O操作可得到硬件设备响应 |
D | 不可中断睡眠, 执行I/O操作得不到硬件设备的响应 |
T | 停止的进程 |
Z | 僵尸进程 |
s | 大S后面的小s,代表包含子进程 |
< | 优先级较高的进程 |
N | 优先级较低的进程 |
+ | 前台运行的进程 |
|(管道符号) | 代表多进程 |
X | 死掉的进程(几乎看不见,死掉后就被回收了) |
l(小写l) | 以多线程的方式运行 |
- D状态与Z状态的进程都无法使用 kill -9 杀死
4.ps -elf 查看命令
- 选项
-e | 显示所有进程 |
---|---|
-f | 全格式 |
-l | 长格式 |
- 三种查看效果对比(PPID代表当前进程的父进程)
5.查看进程不同状态
- S+状态与T状态切换
打开一个文件进行编辑
[root@shawn ~]# vim aaa.txt
ps 查看
[root@shawn ~]# ps aux | grep [v]im
root 94654 0.0 0.5 149816 5408 pts/0 S+ 17:04 0:00 vim aaa.txt
Ctrl + z 暂停挂到后台再查看
[root@shawn ~]# ps aux | grep [v]im
root 94654 0.0 0.5 149816 5408 pts/0 T 17:04 0:00 vim aaa.txt
- 查看 S+ R+ D+ 状态
我们将这些目录打包压缩成一个压缩包,内容比较大
[root@shawn ~]# tar cfz /aaa.gz /home /opt /boot /run
然后不断地使用"ps"命令去查看"tar"的运行状态
[root@shawn ~]# ps aux | grep [t]ar
root 96003 5.0 0.1 123808 1408 pts/0 S+ 17:30 0:00 tar cfz /aaa.gz /home /opt /boot /run
[root@shawn ~]# ps aux | grep [t]ar
root 96003 6.8 0.1 123808 1408 pts/0 R+ 17:30 0:00 tar cfz /aaa.gz /home /opt /boot /run
[root@shawn ~]# ps aux | grep [t]ar
root 96003 5.5 0.1 123808 1408 pts/0 D+ 17:30 0:01 tar cfz /aaa.gz /home /opt /boot /run
捕捉到了三种状态
6.查看进程树
先安装"pstree"应用
[root@shawn ~]# yum -y install psmisc
[root@shawn ~]# rpm -qf `which pstree`
psmisc-22.20-16.el7.x86_64
查看
[root@shawn ~]# pstree
systemd─┬─VGAuthService
├─abrt-watch-log
├─abrtd
├─auditd───{auditd}
├─crond
├─dbus-daemon
├─login───bash
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@shawn ~]# pstree 95327 (查看某一个进程)
bash───pstree
7.动态查看用法top
-
常用选项
-d | 指定刷新时间(秒) |
---|---|
-p | 指定某个进程(PID) |
-u | 查看指定用户的进程 |
-
选项示例
⛅查看指定进程ID的进程信息
top -d 1 -p 11019
1秒刷新一次
⛅查看指定用户开启的所有进程信息
top -d 1 -u song1
1秒刷新一次
-
动态信息含义
⛅首行(可按小写L选择开启或关闭)
top | 当前时间 |
---|---|
up | 系统已运行时间 |
users | 登入的用户数量 |
load average | 平均负载(1分钟,5分钟,15分钟) |
⛅第二行
Tasks: 111 total | 表示有111个进程 |
---|---|
running | 正在运行的进程数 |
sleeping | 正在睡眠的进程数 |
stopped | 停止的进程数 |
zombie | 僵尸进程数 |
⛅第三行
%CPU(s):(按"1"可以展开) | 表示各种占用CPU的百分比 |
---|---|
us | 用户态占用CPU百分比 |
sy | 内核态占用CPU百分比 |
ni | nice值 |
id | 空闲CPU百分比 |
wa | cpu等待I/O完成时间 |
hi | 硬件中断占CPU百分比 |
si | 软件中断占CPU百分比 |
st | 被虚拟化偷走的CPU时间 |
⛅第四行
KIB Mem : | 物理内存 |
---|---|
total | 物理内存总空间 |
free | 空闲空间 |
used | 已用空间 |
buff / cache | 缓冲 / 缓存占用空间 |
⛅第五行
KIB Swap : | 交换分区大小 |
---|---|
total | 交换分区总空间 |
free | 空闲空间 |
used | 已用空间 |
avail Mem | 可用内存 |
⛅信息字段含义补充
PR | 优先级(比 NI 大 20) |
---|---|
NI | nice值,也表示优先级 |
VIRT | 虚拟内存(线性空间) |
RES | 进程当前使用的内存大小 |
SHR | 共享内存 |
-
进程信号
⛅kill -l
列出当前系统支持的信号
⛅常用信号
编号 | 含义 | 作用 |
---|---|---|
1 | SIGHUP | 不用重启进程直接重新加载配置文件 |
9 | SIGKILL | 强制杀死进程(D,Z杀不死) |
15 | SIGTERM | 终止进程, kill默认就是这个信号 |
18 | SIGCONT | 让被停止的进程恢复运行 |
19 | SIGSTOP | 暂停进程 |
⛅信号使用示例(使用信号18,19)
我们开启一个"ping"进程
# ping 192.168.12.1
使用"ps"命令查看"ping"进程
# ps aux | grep [p]ing
停止进程挂职后台
# kill -19 25002
或者 Ctrl + z
再次查看状态
# ps aux | grep [p]ing
使用"18"信号将其继续运行
# kill -18 25002
# ps aux | grep [p]ing
⛅信号使用示例2(使用信号1)
使用信号"1",再不重启进程(进程号不变)的情况下重新载入配置
# vim /etc/vsftpd/vsftpd.conf (编辑ftp配置文件)
# ps aux | grep [v]sftpd (查看ftp进程信息)
root 11019 0.0 0.0 53288 772 ? Ss 17:21 0:00 /usr/sbin/vsftpd/etc/vsftpd/vsftpd.conf
# kill -1 11019 (重载ftp配置文件)
⛅根据进程名杀死所有进程
# killall -9 vim (杀死所有的"vim"进程)
# pkill -9 vim (杀死所有的"vim"进程)
⛅查看某个用户开启的进程
# pgrep -l -u song1
-
TOP常用内部命令
s(默认3秒) | 修改刷新时间,建议不要设置很小,会消耗CPU资源 |
---|---|
q | 退出,或者是 Ctrl + c |
M | 按照内存占用率大小从大到小排序 |
P | 按照CPU占用率从大到小排序 |
N | 按照PID从大到小排序 |
(R) | 以上配合R可进行倒序 |
(shift + > <) | 以上配合左右可进行左右字段选择 |
f | 增加显示的字段,空格键选择 |
k | 发送信号 |
数字 "1" | 展开显示所有的CPU信息 |
z | 变颜色 |
"⬆"," ⬇" | 向上向下进行翻页查看 |
r | 调整进程优先级 |