目录
一.进程的基本信息
1.1进程的定义
1.2进程的特征
1.3进程的组成
1.4线程产生的背景
1.5线程的定义
1.6进程与线程的区别
1.7进程的类别
1.8进程的优先级
1.8.1进程优先级的概念
1.8.2PRI和NI
1.9僵尸进程
1.9.1僵尸进程的定义
1.9.2僵尸进程产生的原因
1.9.3如何解决僵尸进程
二.查看进程
2.1静态查看进程信息 ps命令
2.1.1ps aux
2.1.2ps -le
2.1.3ps -l
2.1.4ps -ef
2.1.4 -o的使用
2.1.5 [选项]--sort的使用
2.2动态查看进程信息 top命令
2.2.1top命令显示的界面的组成
2.2.2top命令的选项
2.2.3top命令的交互界面
2.3 以树状结构显示当前系统中运行的进程 pstree
2.4 查看指定的进程信息
2.4.1根据PID查程序名 prtstat
2.4.2根据程序名查PID pgrep和pidof
2.5 监控系统资源 vmstat
1. Procs(进程)
2. Memory
3. Swap(交换分区)
4. I/O(磁盘)
5. System(系统)
6. CPU
三:进程的前后台调度
3.1区别
3.2前台和后台程序的切换
四:结束进程
4.1kill
4.2killall
五.计划管理工具
5.1计划管理工具的定义
5.2at命令
5.2.1定义
5.2.2格式
5.2.3例子
5.3crontab工具
5.3.1定义
5.3.2格式
六.怎么查看操作系统的五大性能
一.进程的基本信息
1.1进程的定义
运行中的程序的一个副本,是被载入内存的指令集合,是资源分配的单位。
1.2进程的特征
动态性:进程是程序的一次动态执行过程,具有生命周期(创建、运行、终止)。
并发性:任何进程都可以同其他进程一起并发执行。
独立性:进程是系统进行资源分配和调度的一个独立单位。
结构性:由程序、数据集合和进程控制块(PCB)三部分组成。
1.3进程的组成
- 程序:用于描述进程要完成的功能,是控制进程执行的指令集。
- 数据集合:是程序在执行时所需要的数据和工作区。
- 程序控制块(Program Control Block,简称PCB):包含进程的描述信息和控制信息,是进程 存在的唯一标志。
1.4线程产生的背景
早期操作系统中,进程是资源分配和调度的最小单位。但随着应用复杂度提升,进程切换的开销(如内存隔离、上下文保存)成为性能瓶颈,因此引入了更轻量的线程概念。
1.5线程的定义
线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间。
1.6进程与线程的区别
-
线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位
-
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
-
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间
-
进程只接收任务, 不处理任务,线程才是干活的那个
题目
如何确定一个程序 是多线程 还是 单线程?
grep -i threads /proc/[PID]/status # 查看指定进程的线程数
prtstat [PID] # 显示进程详细信息
1.7进程的类别
-
守护进程:完全脱离终端;独立于用户会话运行,系统重启或显式终止才会结束。
-
前台进程: 直接与用户终端(如命令行界面)绑定,接收用户输入并实时输出结果;生命周期与终端会话绑定,终端关闭时进程会被终止;与守护进程相比,前台进程可能被系统分配更高优先级以保证响应速度。
1.8进程的优先级
1.8.1进程优先级的概念
进程优先级是操作系统调度资源的依据,决定了进程获取CPU时间的顺序。优先级越高,进程越容易被调度执行。
1.8.2PRI和NI
在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice
-
PRI(Priority):直接表示进程优先级,数值越小优先级越高。
-
NI(Nice):调整PRI的修正值,范围通常为−20到19。通过
nice
值可间接影响优先级,例如:PRI新值=PRI原值+NI值
NI值为负时提高优先级,为正时降低优先级。
ps axo pid,comm,ni //查看
[root@centos8 ~]#nice -n -10 ping 127.0.0.1
//将进程的 nice值 设为 −10
[root@centos7 ~]#renice -n -20 2118
//将进程的nice值调整为 -20
//注意:普通用户只能调高 NI 值,而不能降低,只有 root 用户才能设定进程 NI 值为负值
1.9僵尸进程
1.9.1僵尸进程的定义
僵尸进程是指 已经终止运行(Exit),但其退出状态(Exit Status)尚未被父进程(Parent Process)回收 的进程。在 Linux/Unix 系统中,僵尸进程仍然占用一个 进程表项(Process Table Entry)。
1.9.2僵尸进程产生的原因
僵尸进程的产生主要有 两个根本原因,都与 父进程未能正确处理子进程的退出状态 有关
-
子进程终止后,父进程没有调用
wait()
或waitpid()
来读取子进程的退出状态 -
父进程异常终止,未正确移交子进程给
init
1.9.3如何解决僵尸进程
[root@centos7 ~]#bash //进入子 Shell
[root@centos7 ~]#echo $BASHPID //打印当前Bash shell的进程ID(这里是1809)
1809
[root@centos7 ~]#echo $PPID //打印其父进程ID(这里是1436)
1436
#将父进程设为停止态
[root@centos7 ~]#kill -19 1436 //杀死子进程,使其进入僵尸态
[root@centos7 ~]#kill -9 1809 //向当前shell(1809)发送SIGKILL信号(9),强制终止当前shell
[root@centos7 ~]#ps aux //查看进程状态,检查是否有僵尸进程,STAT为Z,表示为僵尸态
[root@centos7 ~]#kill -18 1436 //若是父进程未调用 wait()而产生的僵尸进程,则向父进程(1436)发
送SIGCONT信号(18),恢复被暂停的父进程
[root@centos7 ~]#kill -9 1436 //若父进程异常终止未传递子进程,则向父进程(1436)发送SIGKILL
信号(9),强制终止父进程
[root@centos7 ~]#ps aux //再次观察,可以发现僵尸态的进程不存在了
二.查看进程
2.1静态查看进程信息 ps命令
ps 即 process state,是用于查看当前运行的进程信息的命令。
格式:ps [选项]
选项 | 功能 |
-a | 显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将示系统中所有的进程信息。 |
-u | 使用以用户为主的格式输出进程信息。 |
-x | 显示当前用户在所有终端下的进程信息。 |
-e | 显示系统内的所有进程信息。 |
-l | 使用长(Long)格式显示进程信息。 |
-f | 使用完整的(Full)格式显示进程信 |
[选项]--sort | 对属性排序,属性前加 - 表示倒序 |
-o | 用于 自定义输出,允许你只显示特定的进程信息字段 |
2.1.1ps aux
显示系统中所有用户的进程
了解
TTY
tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端)
tty1~tty6 是本地的字符界面终端
tty7 是图形终端
pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个
远程连接占用 pts/1,?代表和终端无关
STAT 组合状态示例
状态码 解释
Ss 会话领导者(如 bash),处于可中断睡眠状态。
Rl 多线程进程(如 java),正在运行或可运行。
D< 高优先级的不可中断睡眠进程(如内核磁盘 I/O 操作)。
S+ 前台进程(如 vim),处于可中断睡眠状态。
Z 僵尸进程(需父进程调用 wait() 回收资源)。
2.1.2ps -le
可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级
了解:
F 值 | 含义 |
---|---|
0 | 普通进程,无特殊标志。 |
1 | 进程刚被 fork() 但尚未执行新程序(如 bash 启动的子进程)。 |
4 | 进程以 root 权限运行(如 sudo 启动的进程)。 |
40 | 进程是会话领导者(如 sshd 或终端 shell)。 |
41 | 会话领导者 + 刚 fork() (如 sshd 新创建的会话)。 |
100 | 进程被调试器(如 gdb )附加。 |
2.1.3ps -l
只能看到当前 Shell 产生的进程
2.1.4ps -ef
要注意区分与ps aux的区别
ps -ef
是 UNIX System V 风格 的命令格式,与 BSD 风格(如 ps aux
)形成鲜明对比
3. 与 BSD 风格(ps aux
)的关键区别
对比项 | UNIX 风格(ps -ef ) | BSD 风格(ps aux ) |
---|---|---|
选项前缀 | 必须加 - (如 -e 、-f ) | 无 - (直接写 aux ) |
用户显示 | UID (数字) | USER (用户名) |
CPU/内存 | 无默认列,需手动指定(如 ps -eo %cpu,%mem ) | 默认显示 %CPU 和 %MEM |
命令行信息 | CMD (短格式),-f 显示完整命令 | 默认显示完整 COMMAND |
进程树 | ps -ejH | ps axjf |
2.1.4 -o的使用
格式;ps -o <字段1>,<字段2>,<字段3>...
例子:
2.1.5 [选项]--sort的使用
作用:用于 按指定字段对进程列表进行排序,帮助快速识别高资源占用的进程或特定状态的进程
ps [选项] --sort=[+|-]字段名
+字段名:升序排序(默认,可省略 +)。
-字段名:降序排序(如 -%cpu 表示 CPU 占用从高到低)。
多字段排序:用逗号分隔(如 --sort=-%cpu,%mem)
例子:
2.2动态查看进程信息 top命令
top是 Linux 系统中一个 实时动态监控系统进程和资源占用 的交互式工具,比 ps
更直观,适合实时观察 CPU、内存、负载等关键指标
2.2.1top命令显示的界面的组成
界面主要分为两部分:
-
系统汇总信息(顶部前5行)
-
系统运行时间、用户数、负载均衡(Load Average)、CPU/内存使用率等。
-
-
进程列表(下方)
-
实时更新的进程状态(默认按 CPU 占用排序)。
-
如下图所示:
系统汇总信息 (顶部前5行)
第一行:系统运行时间与负载
内 容 | 说 明 |
---|---|
13:43:55 | 系统当前时间 |
up 1:57 | 系统的运行时间1小时57分钟 |
4 users | 当前登录了四个用户 |
load average: 0.00,0.00,0.00 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载 |
第二行:任务(进程)状态
内 容 | 说 明 |
---|---|
Tasks: 216 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
215 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第三行:CPU使用率
字段 | 含义 |
---|---|
us | 用户空间 CPU 占用(如应用程序运算)。 |
sy | 内核空间 CPU 占用(如系统调用、中断处理)。 |
ni | 低优先级进程(nice 值>0)占用的CPU。 |
id | 空闲CPU百分比(越高说明系统负载越轻)。 |
wa | I/O等待(高值说明磁盘或网络瓶颈)。 |
hi /si | 硬件/软件中断占用(通常接近0)。 |
st | 虚拟机偷取时间(若>10%,说明宿主物理机资源不足) |
第四行:物理内存(RAM)
字段 | 含义 |
---|---|
total | 内存总量(单位:MiB)。 |
free | 完全未使用的内存(Linux会充分利用空闲内存缓存数据,此值低未必是问题)。 |
used | 已使用的内存(含应用程序和缓存)。 |
buff/cache | 缓存和缓冲区内存(可被快速释放供应用程序使用)。 |
第五行:交换分区(Swap)
字段 | 含义 |
---|---|
total /free /used | Swap分区总量/剩余/使用量(若used 持续>0,说明物理内存不足)。 |
avail Mem | 可用内存估算(含未被占用的缓存,更真实反映剩余可用内存)。 |
进程列表(动态刷新)
字段含义同ps 命令
2.2.2top命令的选项
选项 | 作用 | 示例 |
---|---|---|
-d <秒> | 设置刷新间隔时间(默认3秒)。 | top -d 1 (每秒刷新) |
-n <次数> | 刷新指定次数后自动退出(适合脚本捕获数据)。 | top -n 2 (刷新2次后退出) |
-b | 批处理模式(禁止交互,直接打印结果)。 | top -b -n 1 > log.txt |
-p <PID> | 仅监控指定PID(多个PID用逗号分隔)。 | top -p 1234,5678 |
-u <用户> | 仅显示指定用户的进程。 | top -u mysql |
-c | 切换显示完整命令行(启动时直接展开)。 | top -c |
2.2.3top命令的交互界面
在 top
运行后,可通过按键动态调整:
按键 | 功能 |
---|---|
m | 按内存使用率排序(升序)。 |
T | 按运行时间排序(降序)。 |
N | 按PID排序(升序)。 |
c | 按照 CPU 的使用率排序,默认就是此选项 |
k | 终止进程(需输入PID,默认发送SIGTERM )。 |
r | 调整进程优先级(需输入PID和新的nice 值)。 |
h或者? | 显示帮助菜单。 |
q | 退出 top 。 |
2.3 以树状结构显示当前系统中运行的进程 pstree
pstree
是 Linux 中用于 以树状结构可视化进程父子关系 的命令,比 ps
更直观地展示进程的层次结构。
pstree //不指定参数:显示整个系统的进程树,以 systemd(或 init)为根节点。
pstree [选项] <PID> //指定 PID:显示该进程及其子进程的子树。
pstree [选项] <用户名> //指定用户名:仅显示该用户的进程树。
常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程
2.4 查看指定的进程信息
2.4.1根据PID查程序名 prtstat
例子:查找PID=10268的进程信息
2.4.2根据程序名查PID pgrep和pidof
选项 | 作用 |
---|---|
-l | 同时输出进程名(否则仅输出 PID)。 |
-u | 按用户名过滤(如 -u root )。 |
-a | 显示完整格式的进程名。 |
-p pid | 显示指定进程的子进程。 |
例子:
[root@test ~]# pgrep -l "log" //显示进程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd
[root@localhost ~]#pidof nginx //查看 nginx进程的 pid 号
22142 22002
2.5 监控系统资源 vmstat
vmstat
(Virtual Memory Statistics)是 Linux 系统中用于 监控系统资源使用情况 的命令行工具,主要报告 内存、进程、CPU 活动、磁盘 I/O 等关键指标。
1. Procs(进程)
字段 | 含义 |
---|---|
r | 运行队列中的进程数(正在运行或等待 CPU 的进程,若持续 > CPU 核心数,说明 CPU 饱和)。 |
b | 不可中断睡眠的进程数(通常因 I/O 阻塞,如磁盘读写)。 |
2. Memory
字段 | 含义 |
---|---|
swpd | 已使用的 交换分区(Swap) 大小。 |
free | 空闲的物理内存。 |
buff | 用作 缓冲区 的内存(缓存文件元数据)。 |
cache | 用作 页面缓存 的内存(缓存文件内容)。 |
3. Swap(交换分区)
字段 | 含义 |
---|---|
si | 从磁盘换入内存 的数据量(KB/s,高值说明内存不足)。 |
so | 从内存换出到磁盘 的数据量(KB/s,高值说明内存不足)。 |
4. I/O(磁盘)
字段 | 含义 |
---|---|
bi | 从块设备读取 的块数(Blocks/s,如磁盘读操作)。 |
bo | 写入块设备 的块数(Blocks/s,如磁盘写操作)。 |
5. System(系统)
字段 | 含义 |
---|---|
in | 每秒中断次数(包括时钟中断)。 |
cs | 每秒上下文切换次数(进程/线程切换,高值可能因过多线程或锁竞争)。 |
6. CPU
字段 | 含义 |
---|---|
us | 用户空间 CPU 时间(应用程序运算)。 |
sy | 内核空间 CPU 时间(系统调用、中断处理)。 |
id | 空闲 CPU 时间。 |
wa | I/O 等待时间(高值说明磁盘瓶颈)。 |
st | 虚拟机偷取时间(若 >10%,物理机资源不足)。 |
三:进程的前后台调度
3.1区别
特性 | 前台进程 | 后台进程 |
---|---|---|
终端控制权 | 占用当前终端,用户无法输入其他命令,直到进程结束。 | 不占用终端,启动后立即返回 Shell,用户可继续操作。 |
适用场景 | 需要交互的命令(如 vim 、passwd )。 | 长时间运行的任务(如编译、下载),并行运行 |
3.2前台和后台程序的切换
Linux 前后台任务管理
├── **后台启动**
│ └── `命令 + &`(例:`python script.py &`)
├── **查看任务**
│ └── `jobs -l`(显示任务编号与进程ID)
├── **前后台切换**
│ ├── 前台转后台:`Ctrl+Z` → `bg %任务编号`
│ └── 后台转前台:`fg %任务编号`
├── **任务控制**
│ ├── 暂停任务:`Ctrl+Z`
│ └── 恢复后台运行:`bg %任务编号`
└── **终止任务**
└── `kill %任务编号` 或 `kill 进程ID`
四:结束进程
4.1kill
kill
命令是 Linux 中用于 向进程发送信号(Signal) 的核心工具,用于终止进程
kill [选项] <PID> // 通过进程ID发送信号
常用信号
-1 重新加载进程
-9 强制结束进程
-19 暂时停止进程
-18 让进程从停止状态恢复
4.2killall
killall
是 Linux 中用于 按进程名批量终止进程 的命令,相比 kill(需指定 PID),它直接通过进程名称操作,更适合批量管理。
命令格式
killall [选项] [信号] 进程名
[选项]
-u 仅终止指定用户的进程
-l 列出可用的信号列表
-i 交互式,询问是否要杀死某个进程
-I 忽略进程名的大小写
五.计划管理工具
5.1计划管理工具的定义
计划管理工具是指通过系统化的方法,帮助个人或组织对任务、资源、时间等要素进行规划、协调、监控和优化的软件或平台。其核心目标是通过结构化流程提升效率,确保项目或任务在既定时间、预算和资源约束下达成目标
5.2at命令
5.2.1定义
at命令是 Linux 中用于 在指定时间执行一次性任务 的计划任务工具,适合临时安排未来某个时间点运行的命令或脚本。
5.2.2格式
at [选项] 时间
其中关于时间有绝对时间和相对时间两种计时方式
绝对时间
-
格式 用法 HH:MM 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 Midnight(midnight) 代表 12:00 AM(也就是 00:00)。 Noon(noon) 代表 12:00 PM(相当于 12:00)。 Teatime(teatime)下午茶 代表 4:00 PM(相当于 16:00)。 英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。 MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 号。
相对时间
now +n minutes-----------从现在起 n 分钟后
now +n hours--------------从现在起 n 小时后
now +n days---------------从现在起 n 天后
now +n weeks-------------从现在起 n 周后
5.2.3例子
at 14:30
at> echo "会议时间到了!" > ~/reminder.txt
at> <按Ctrl+D结束>
//这个命令会在下午2:30创建一个提醒文件
at now + 5 minutes
at> wall "系统将在5分钟后重启,请保存工作!"
at> <Ctrl+D>
//5分钟后执行命令
at midnight 12252023
at> /home/user/christmas_script.sh
at> <Ctrl+D>
//2023年12月25日午夜执行命令
5.3crontab工具
5.3.1定义
crontab是 Linux/Unix 系统中用于设置 周期性任务 的工具,允许用户在固定时间、日期或间隔自动执行命令或脚本。与 at(单次任务调度)不同,crontab适用于 重复性任务。
5.3.2格式
crontab [选项] 文件名
选项 | 说明 |
---|---|
-e | 编辑当前用户的 crontab 文件 |
-l | 列出当前用户的 crontab 任务 |
-r | 删除当前用户的 crontab 任务(全部删除) |
-i | 删除前提示确认(配合 -r 使用) |
-u user | 管理指定用户的 crontab(需 root 权限) |
crontab -l //查看当前用户的crontab
crontab -e //创建或编辑当前用户的crontab
执行此命令后,会打开一个文本编辑器,编辑crontab文件
crontab时间格式
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └───── 星期 (0 - 6, 0=周日)
│ │ │ └────────── 月份 (1 - 12)
│ │ └─────────────── 日 (1 - 31)
│ └──────────────────── 小时 (0 - 23)
└───────────────────────── 分钟 (0 - 59)
特殊符号说明
符号 | 含义 | 示例 |
---|---|---|
* | 任意值(每分钟/每小时等) | * * * * * → 每分钟执行 |
, | 指定多个时间点 | 0,15,30,45 * * * * → 每 15 分钟执行 |
- | 时间范围 | 0 9-18 * * * → 9AM-6PM 每小时执行 |
/ | 间隔时间 | */5 * * * * → 每 5 分钟执行 |
5..3.3例子
# 每天 9AM-6PM,每小时执行一次
0 9-18 * * * /path/to/check_status.sh
# 每周一至周五,上午 8:30 执行
30 8 * * 1-5 /path/to/daily_task.sh
# 每月 1 号和 15 号,晚上 11:30 执行
30 23 1,15 * * /path/to/monthly_job.sh
# 每 10 分钟执行,但仅在工作日(周一到周五)
*/10 * * * 1-5 /path/to/frequent_task.sh
六.怎么查看操作系统的五大性能
1.内存
2.磁盘 磁盘剩余量 磁盘I/O读写性能
3.CPU CPU占用率
4.网络
内存用free;top
磁盘剩余量用df;lsblk;fdisk -l
磁盘读写用iostat;vmstat
CPU用top(实时) ps(静态)
网络 iftop
系统版本cat /etc/redhat-release
ip地址 ifconfig
内核版本 uname-r