一.基本概念
1.程序与进程
1)程序
数据+指令的集合,静态过程,可长期存储于系统;
通常以文件的形式存储在磁盘上。
2)进程
程序运行过程,动态过程,随程序killed而消失,不会长存于系统中。
原来原来,静态与动态:大概就是平静的湖面,与台风天的湖面(桦加沙的威力......)
3)如何理解?
同一个菜谱(程序)可以被多个厨师(进程)同时使用来做出多份菜。
一个程序可以对应多个进程(例如,同时打开多个浏览器窗口);
进程是操作系统进行资源分配和调度的基本单位;
进程之间通常是相互隔离的,一个进程的崩溃通常不会直接影响其他进程(独立的地址空间)。
2.进程与线程
1)进程
拥有独立的内存空间,资源分配基本单位。
2)线程
线程是进程的执行单位,一个进程可以包含一个或多个线程。
每个线程有自己的栈、程序计数器和寄存器状态。
3)如何理解?
如果把进程比作一个工厂,那么线程就是工厂里的工人。工人们共享工厂的资源,但每个工人有自己的工作台(栈)和当前正在做的具体任务(程序计数器)。
进程是资源分配的单位,线程是CPU调度的单位。
进程有独立的地址空间,线程共享所属进程的地址空间。
线程比进程更轻量,创建和切换更快,通信更方便,但也更易受线程彼此影响(需要同步机制)。
3.并发与并行
1)并发
一段时间多个任务都处于“执行”状态(可能交替执行),任务的分解、组合和调度,逻辑上的同时发生。
2)并行
同一时刻有多个任务执行,多个计算资源(如多核CPU、多台机器)来加速计算,物理上的同时发生。
3)如何理解?
并行是并发的一种实现方式。
并发:单核靠切换。
并行:多核真干活。
4.进程运行状态

运行态:进程正在执行CPU指令
运行---->阻塞:进程IO操作,需等待而无法运行
阻塞态:进程由于等待某个事件的发生而无法继续执行。
阻塞---->就绪:进程等待已完成,无法立即运行
就绪---->运行:运行时间片已用完,CPU从就绪队列选择合适进程分配
就绪态:进程已准备好运行,获得除CPU之外的必要资源。
运行---->就绪:
1)进程占用CPU时间过长;
2)高优先级进程抢占资源,低优先级先转就绪态(呜呜呜呜......又搞霸凌)
如何理解?
运行态:火箭发射;阻塞态:天时地利人和;就绪态:已做最后检查等待点火指令。
(觉得抽象的话自己再查查,个人观点,仅供参考)
5.僵尸进程与孤儿进程
当父进程接受到任务时会通过fork派生子进程来处理,子进程继承父进程属性。
ppid:父进程 pid:子进程
1)僵尸进程
子进程执行 exit() 结束。
内核保留其进程控制块(PCB),记录退出状态等信息。
父进程未调用 wait() 或 waitpid() 来读取子进程退出状态。
2)孤儿进程
父进程在子进程仍在运行时提前退出。
子进程的父进程 PID 被设置为 1(即 init 或 systemd)。
init 进程会定期调用 wait() 回收这些“养子”进程。
3)区别

二.进程运行状态监控
1.静态监控
1.1ps-aux

下面对每列进行说明:

其中:TTY中?代表内核程序;COMMAND中有[]代表内核态进程,无[]代表用户态进程
1.2STAT
就是上图中的stat

附加字符:

总结:
R = 正在跑或准备跑
S = 睡觉中(可被叫醒)
D = 深度睡眠(叫不醒,等 I/O)
T = 被暂停
Z = 僵尸(等父进程收尸)
s/l/+/< = 附加(会话领导/多线程/前台/高优先级)
2.动态监控
2.1top
-d:刷新时间
-p:指定pid
-u:指定用户
2.2字段含义

第一行:系统运行时间和负载;
第二行:任务(进程)统计;
第三行:CPU 使用情况(按时间平均);
硬中断与软中断
1)硬中断(hi):由硬件设备主动发起(如键盘,网卡),与当前 CPU 执行的指令无关(异步)
2)软中断(si):由软件指令主动触发,由当前执行的程序显式调用(同步)
nice值(ni)
-20 到 +19含义:最高优先级到最低优先级。
nice 值越高,获得的 CPU 时间越少;nice 值越低,获得的 CPU 时间越多。
注意:上图中
PR(优先级):显示nice值,-20映射到0,+19映射到39
NI(Nice值):显示nice值,默认是0

第四、五行:内存使用情况(单位通常为 KiB)
total:物理内存总量。
free:完全未被使用的内存。
used:已被使用的内存(包括应用程序和内核使用)。
buff/cache:用于缓冲区和缓存的内存,可被回收。
avail Mem:估算的可用于启动新应用程序的内存。
Swap 行:交换分区(虚拟内存)的使用情况。
计算公式:
存在误差是正常的,只是估算
total=used+free+buffer+cache
used=total-free-buffers-cache
free=total-used-buffer-cache
avail=free+(buffer+cache可释放的空间)
3.管理进程状态
3.1进程信号

三种常用:
1)SIGHUP:常用来加载配置文件;
9)SIGKILL:强制杀死进程
11)SIGSEGV:终止进程,默认信号
3.2关闭进程
1)kill -15:终止
2)kill -9:用于-15无效,强制
3)pkill + 进程服务名称
4.后台进程
不占用终端,运行时不阻塞用户继续输入其他命令,通常没有控制终端(TTY)。
常用于执行系统服务、守护任务、定时作业或其他不需要用户界面支持的操作。
4.1如何启动?
在命令末尾加 &
4.2如何查看后台任务?
使用 jobs 命令(仅查看当前 shell 的后台任务)
5.系统平均负载
5.1如何理解?
平均负载 = 可运行状态(R) + 不可中断状态(D) 的平均进程数。---->R和D上面有提到
5.2三个数值
[root@node ~]# uptime
18:46:49 up 2:11, 1 user, load average: 0.00, 0.01, 0.04
这里的load average:代表1分钟,5分钟,15分钟平均负载
5.3如何判断负载是否合理?
假设系统有N 个 CPU 核心:
Load ≈ N:系统满载,资源刚好用完。
Load < N:系统较空闲。
Load > N:有进程在排队等待资源,系统过载。
注意:Load 长期超过 CPU 核数的 70% 就应警惕。
5.4平均负载 ≠ CPU 使用率
I/O 密集型任务会导致负载升高,但 CPU 使用率可能很低。
平均负载高有可能是CPU密集型进程导致。

221

被折叠的 条评论
为什么被折叠?



