1.1 进程的定义
什么是进程?
进程是正在运行的程序。它包括以下关键部分:
-
内存地址空间:每个进程都会分配一个虚拟内存空间。
-
安全属性:包括所有权、特权、以及是否可以访问特定资源。
-
线程:每个进程可以有一个或多个线程来执行任务。
-
进程状态:一个进程可以处于不同的状态,例如运行、等待等。
每个进程的环境包括:
-
本地变量和全局变量
-
当前调度上下文
-
分配的系统资源,如文件和网络端口
进程的生命周期
在 RHEL9 中,进程的生命周期是通过父进程 fork (复制地址空间)来创建新的子进程。每个进程都有一个唯一的进程 ID(PID)。父进程在子进程运行时通常处于睡眠状态,等待子进程完成并清理资源。子进程结束后可能成为 僵尸进程(Zombie),父进程会接收到信号并清理这些进程资源。
在 RHEL9 中,系统的第一个进程是 systemd,负责管理所有其他服务。
1.2 描述进程状态
进程状态的分类
进程的状态在 ps 或 top 命令中可以查看。常见的进程状态包括:
-
R:运行中或可运行
-
S:睡眠中,等待某些事件
-
D:不可中断的睡眠状态,通常是等待 I/O
-
Z:僵尸进程,已经结束,但父进程尚未清理
-
T:停止的进程,可能是被暂停或跟踪
查看进程
使用 ps 命令列出进程时,我们可以查看每个进程的以下信息:
-
进程的用户 UID
-
进程的 PID
-
CPU 时间
-
内存分配量
-
进程的控制终端
-
当前进程的状态
ps aux # BSD 格式 ps -ef # SysV 格式
ps --forest:以树形结构显示进程关系(父子进程)
2.1 描述作业和会话(Job and Session)
作业控制(Job Control)
在 Linux 中,作业控制是 shell 的一种功能,允许一个 shell 实例管理多个命令。每个终端(TTY)只能有一个前台作业,所有其他作业都是后台作业。
进程与会话的关系
-
会话:由一个终端启动,包含一个前台进程和任意数量的后台进程。
-
作业:一个终端上的一个作业通常对应一个进程。
查看作业状态
-
使用
jobs命令列出后台作业。 -
使用
fg %jobid将后台作业切换到前台。 -
使用
ctrl+z将前台进程放到后台并暂停运行。
2.2 在后台运行作业
如何在后台运行命令
在命令后加 &,即可将命令放入后台运行,shell 会继续显示提示符。
command &
管理后台作业
-
jobs:查看当前所有后台作业 -
fg %jobid:将指定作业从后台切换到前台 -
bg %jobid:恢复后台作业运行
3.1 使用信号控制进程
信号(Signals)
信号是进程间的通信方式,通常用来报告事件或控制进程。常见信号类型包括:
-
TERM(15):请求进程终止,正常退出。
-
KILL(9):强制结束进程,不会进行清理。
-
STOP(19):暂停进程,等待恢复。
-
CONT(18):继续运行被暂停的进程。
使用 kill 命令
-
kill PID:发送信号到进程。 -
kill -l:列出所有可用的信号。 -
kill -9 PID:强制终止进程。
通过名称发送信号
使用 pkill 命令根据进程名称、用户或其他属性发送信号:
pkill -f <pattern> # 通过匹配模式杀死进程
4.1 描述负载平均值(Load Average)
什么是负载平均值?
负载平均值表示一定时间内系统的平均负载,通常由以下三个数值表示:
-
1分钟负载
-
5分钟负载
-
15分钟负载
负载数值反映了系统上正在执行的进程数以及等待 CPU 资源的进程数。如果负载值远大于 CPU 核心数,表示系统超载。
uptime # 查看负载平均值 lscpu # 查看 CPU 核心数
4.2 解读 Load Average
使用 uptime 命令查看负载平均值。将负载数值除以 CPU 数量(如果启用了超线程技术,计算逻辑核心)可以评估系统资源是否饱和。
-
负载值 < 1:资源利用率适当
-
负载值 > 1:系统资源饱和,存在延迟
-
负载值远大于 CPU 核心数:说明系统压力过大
4.3 实时进程监控
使用 top 命令
top 命令用于实时查看系统负载、进程状态等。默认情况下,每 5 秒刷新一次。
top
常见输出信息
-
PID:进程 ID
-
USER:进程所有者
-
VIRT:虚拟内存使用
-
RSS:实际内存使用
-
STAT:进程状态
小结
-
进程在 RHEL9 中有明确的生命周期,包括父子进程、资源管理、状态切换等。
-
使用
ps和top等工具监控进程,理解S、R、Z等进程状态。 -
使用信号控制进程的暂停、终止和恢复。
-
系统负载的监控通过
uptime和load average来反映,合理评估系统性能。