一、进程的基本概念
1. 进程与程序的区别
- 程序:静态的可执行文件(如
/bin/ls),存储在磁盘上,包含指令和数据。 - 进程:程序加载到内存后的动态执行实例,拥有独立的内存空间、CPU 时间片和系统资源(如文件描述符)。一个程序可对应多个进程(如多个
bash终端)。
2. 进程标识(PID 与 PPID)
- PID(Process ID):每个进程的唯一数字标识(由内核分配,范围通常为 1~32768),用于区分不同进程。
- PPID(Parent PID):父进程的 ID,标识创建当前进程的进程(如用户登录后,
bash进程是用户执行命令的父进程)。 - 特殊 PID:
PID=1是init(Systemd)进程,为所有进程的 “祖先”,负责系统初始化和进程管理。
3. 进程状态
进程在生命周期中会处于不同状态,通过ps命令的STAT字段标识,常见状态如下:
| 状态符号 | 含义说明 |
|---|---|
| R(Running) | 运行中或就绪(等待 CPU 调度),处于该状态的进程要么正在执行,要么已就绪等待分配 CPU。 |
| S(Sleeping) | 可中断睡眠(等待事件完成,如 IO 操作),可被信号唤醒(如kill命令)。 |
| D(Disk Sleep) | 不可中断睡眠(深度睡眠,通常为等待磁盘 IO),不能被信号唤醒,需等待 IO 完成。 |
| T(Stopped) | 暂停状态,通常由Ctrl+Z或kill -STOP触发,可通过kill -CONT恢复运行。 |
| Z(Zombie) | 僵尸状态,进程已终止,但父进程未回收其资源(PID 等),需回收父进程或重启父进程清除。 |
| <(High Priority) | 高优先级进程(优先级高于普通进程)。 |
| N(Low Priority) | 低优先级进程(优先级低于普通进程)。 |
| +(Foreground) | 前台进程(与终端关联,如直接执行的ls),后台进程无此标记。 |
二、进程的查看与监控
1. ps:静态查看进程快照
ps(Process Status)用于查看某一时刻的进程状态,支持多种选项组合:
| 常用命令 | 功能说明 |
|---|---|
ps aux | 显示系统中所有进程(a:所有用户进程;u:显示用户信息;x:包括无终端进程)。 |
ps -ef | 以全格式显示进程(-e:所有进程;-f:全字段,包括 PPID、CMD 等)。 |
ps -l | 显示当前终端的进程详情(包含优先级、状态等)。 |
输出字段解读(ps aux):
ps -ef 指令显示内容如下:
USER:进程所属用户。PID:进程 ID。%CPU:进程占用 CPU 的百分比。%MEM:进程占用内存的百分比。VSZ:虚拟内存大小(KB),包括所有代码、数据、共享库和未使用的交换空间。RSS:物理内存使用量(KB),实际占用的内存。TTY:进程关联的终端(?表示无终端,通常为守护进程)。STAT:进程状态(见上文)。START:进程启动时间。TIME:进程累计占用的 CPU 时间。COMMAND:启动进程的命令(包括参数)。- UID: 用户ID
PID:进程 ID- PPID: 父进程ID
- C: CPU 用于计算执行优先级的因子。 数值越大,表明进程是 CPU 密集型运算,执行优先级会降低; 数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
- STIME :进程启动的时间
- TTY :完整的终端名称
- TIME: CPU 使用时间
- CMD:启动进程所用的命令和参数
2. top:动态监控进程(实时更新)
top 以交互式界面实时显示进程状态(默认每 3 秒更新一次),适合监控系统负载和资源占用。
界面分区:
- 顶部系统信息:
- 第一行:当前时间、系统运行时间、登录用户数、系统负载(1/5/15 分钟平均负载,数值接近 CPU 核心数为正常)。
- 第二行:进程总数(total)、运行中(running)、睡眠(sleeping)、停止(stopped)、僵尸(zombie)数量。
- 第三 / 四行:CPU 和内存使用情况(
%us用户态 CPU,%sy内核态 CPU,%id空闲 CPU)。
- 底部进程列表:与
ps类似,默认按 CPU 使用率排序。
常用交互命令:
P:按 CPU 使用率排序(默认)。M:按内存使用率排序。T:按累计 CPU 时间排序。k:输入 PID 并发送信号(如终止进程)。q:退出top。
3. htop:增强版top(推荐)
htop 是top的改进版,支持鼠标操作、彩色显示、进程树视图等,需单独安装(yum install htop 或 apt install htop)。
- 优势:可直接用方向键选择进程,按
F9发送信号终止进程,按F5切换进程树视图。
4. pstree:查看进程树(父子关系)
pstree 以树形结构展示进程间的父子关系,直观呈现进程层级:
pstree # 简洁显示所有进程树
pstree -p # 显示PID
pstree root # 只显示root用户的进程树
5. /proc文件系统:查看进程详细信息
Linux 通过/proc/[PID]目录存储每个进程的实时数据(虚拟文件系统,存在于内存中),常用文件:
/proc/[PID]/cmdline:进程启动命令及参数。/proc/[PID]/status:进程状态(包括 PID、PPID、内存使用、状态等)。/proc/[PID]/cpuinfo:进程使用的 CPU 核心信息。/proc/[PID]/fd:进程打开的文件描述符(链接到实际文件)。
示例:查看 PID=1234 的进程命令:
cat /proc/1234/cmdline
三、进程的控制与管理
1. 进程的启动
- 前台启动:直接执行命令(如
ls),进程占用终端,需等待执行完成才能输入新命令。 - 后台启动:命令后加
&,进程在后台运行,终端可继续使用(输出仍会显示在终端):sleep 100 & # 后台运行100秒的睡眠进程 - 脱离终端启动:用
nohup(忽略挂起信号),确保进程在终端关闭后继续运行,输出默认写入nohup.out:nohup ./script.sh & # 后台启动脚本,终端关闭后不终止
2. 进程的暂停与恢复
- 暂停进程:在前台进程执行时按
Ctrl+Z,进程进入T(停止)状态,退回终端。 - 查看后台任务:
jobs命令显示当前终端的后台任务([任务号] 状态 命令):jobs # 输出示例:[1]+ Stopped sleep 100 - 恢复前台运行:
fg %任务号(%可省略,任务号从jobs获取):fg 1 # 将任务1恢复到前台运行 - 恢复后台运行:
bg %任务号,将暂停的进程转为后台运行:bg 1 # 任务1在后台继续运行
3. 进程的终止(发送信号)
通过kill、pkill、killall命令向进程发送信号(Signal)终止或控制进程,常用信号:
| 信号编号 | 信号名称 | 含义说明 |
|---|---|---|
| 1 | SIGHUP | 挂起信号(如终端关闭),常用于重启进程(如nginx重载配置)。 |
| 9 | SIGKILL | 强制终止信号,进程无法忽略,用于强制杀死无响应的进程(“必杀信号”)。 |
| 15 | SIGTERM | 终止信号(默认),进程可捕获并优雅退出(释放资源后终止,推荐优先使用)。 |
| 19 | SIGSTOP | 暂停信号,进程进入T状态,需SIGCONT恢复。 |
| 18 | SIGCONT | 继续信号,恢复被暂停的进程。 |
常用命令:
-
kill [信号] PID:向指定 PID 的进程发送信号(默认信号 15):kill 1234 # 发送SIGTERM(15)终止PID=1234的进程 kill -9 1234 # 发送SIGKILL(9)强制杀死PID=1234的进程 -
pkill [信号] 进程名:按进程名匹配并发送信号(支持模糊匹配):pkill -9 sleep # 强制杀死所有名为sleep的进程 -
killall [信号] 进程名:与pkill类似,但需完全匹配进程名:killall -1 nginx # 向所有nginx进程发送SIGHUP(重启配置)
四、进程调度与优先级
Linux 内核通过调度器分配 CPU 时间片给进程,确保多进程 “并发” 运行(宏观并行,微观串行)。
1. 调度策略
- CFS(Completely Fair Scheduler,完全公平调度器):默认调度策略,针对普通进程(非实时),按 “权重” 分配 CPU 时间,优先级高的进程获得更多时间片。
- 实时调度策略:针对实时进程(如工业控制),优先级高于 CFS 进程,包括:
SCHED_FIFO(先进先出):高优先级进程一旦运行,会一直占用 CPU 直到主动释放。SCHED_RR(时间片轮转):相同优先级的进程按时间片轮流运行。
2. 优先级表示:Nice 值与 PRI
- Nice 值:用户空间可见的优先级,范围
-20(最高)~19(最低),默认值为 0。Nice 值越小,进程优先级越高,获得的 CPU 时间越多。 - PRI(Priority):内核内部的优先级(动态计算),与 Nice 值相关(
PRI = PRI_BASE + Nice值,PRI_BASE 通常为 80),值越小优先级越高。
3. 调整优先级
-
启动时指定优先级:
nice命令,格式:nice -n [Nice值] 命令:nice -n -5 ./high_prio.sh # 以Nice值-5启动脚本(高优先级) -
运行中调整优先级:
renice命令,格式:renice [新Nice值] -p PID:renice -10 -p 1234 # 将PID=1234的进程Nice值改为-10(提高优先级)
五、守护进程(Daemon)
守护进程是在后台长期运行的特殊进程,用于提供系统服务(如sshd、httpd),特点:
- 脱离终端(
TTY字段为?),不受终端关闭影响。 - 通常以
d结尾(如crond、named)。 - 由
systemd(或init)管理,系统启动时自动运行。
查看守护进程:
ps aux | grep -E 'sshd|httpd|crond' # 查看常见守护进程
六、僵尸进程的处理
僵尸进程(Z 状态)是已终止但未被父进程回收的进程,会残留 PID(不占用 CPU / 内存,但过多会耗尽 PID 资源)。
处理方法:
- 找到其父进程(通过
ps -ef | grep 僵尸进程PID查看 PPID)。 - 正常情况下,父进程会定期回收子进程,若父进程未响应,重启父进程:
kill -15 父进程PID # 优雅重启父进程,触发回收 - 若父进程无法重启,直接杀死父进程(僵尸进程会被
init(PID=1)接管并回收):kill -9 父进程PID
516

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



