6. linux shell命令(3)进程管理相关命令
3. linux进程管理相关命令
3.1 进程的概念
- 编译程序上的两个进程
3.2 使用ps命令查看进程
-
ps 命令
-
显示进程 (process) 的动态
-
语法:
ps [options] -
常见的参数:
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
这是 Linux 系统下执行 ps -au
命令的输出,用于查看当前系统中用户进程的详细状态,可以从这些信息理解系统的进程运行情况:
各列含义与关键进程解读
-
列说明:
USER
(进程所属用户)、PID
(进程ID)、%CPU
(CPU占用率)、%MEM
(内存占用率)、VSZ
(虚拟内存大小)、RSS
(物理内存使用量)、TTY
(关联的终端)、STAT
(进程状态)、START
(启动时间)、TIME
(CPU总占用时间)、COMMAND
(进程对应的命令)。 -
关键进程:
- 多个
root
用户的/sbin/getty
进程(如PID 865
、870
等):这是系统“终端登录服务”的进程,负责在tty2
、tty3
等虚拟终端上提供登录界面。 root
用户的/usr/bin/X
进程(PID 1121
):这是X Window 系统的服务进程(图形界面的核心服务),能看到它占用了 3.0% CPU、3.3% 内存,且已运行 1 小时 25 分钟,说明系统在提供图形界面支持。linux
用户的bash
进程(如PID 2626
、3202
):bash
是 Linux 默认的命令行解释器(Shell),这些是当前用户打开的终端会话。- 最后一行
linux
用户的ps -au
进程(PID 4812
):就是当前执行ps -au
命令本身的进程(用于查看进程,所以自己也会显示在列表里)。
- 多个
整体来看,系统进程运行比较简洁,图形界面服务(X
进程)、终端登录服务(getty
)、用户 Shell 会话都在正常运行,没有明显“异常高占用”的进程。
- 进程的状态标志
D: 不可中断的静止
R: 正在执行中
S: 阻塞状态
T: 暂停执行
Z: 不存在但暂时无法消除
<: 高优先级的进程
N: 低优先级的进程
L: 有内存分页分配并锁在内存中
top命令
- 监视进程
- 通常会全屏显示,而且会随着进程状态的变化不断更新
- 整个系统的信息也会显示,为查找问题提供了便利
- 可以显示系统总共有多少CPU和内存资源以及负载平衡等信息。
如图,这是 Linux 系统中 top
命令的输出,用于实时监控系统进程与资源占用,以下分模块解释:
一、系统概览(最上方行)
top - 00:22:00
:当前系统时间;up 54 min
:系统已运行 54 分钟;2 users
:当前有 2 个用户登录系统;load average: 0.07, 0.03, 0.07
:系统负载平均值(分别对应 1 分钟、5 分钟、15 分钟的负载)。数值越低,说明系统越“空闲”(这里数值都很小,系统很轻松)。
二、任务(Tasks)统计
187 total
:系统总共有 187 个进程(进程是程序的运行实例);2 running
:当前仅 2 个进程在“主动占用 CPU 运行”;185 sleeping
:185 个进程处于“睡眠/等待”状态(比如等网络、等用户操作,暂时不消耗 CPU);0 stopped
:没有进程被“暂停”(比如被Ctrl+Z
暂停的进程数为 0);0 zombie
:没有“僵尸进程”(僵尸进程是进程已结束但资源未回收的异常状态,此处系统很健康)。
三、CPU 使用率(%Cpu(s))
把 CPU 总时间看作 100%,各部分是 CPU 时间的分配比例:
3.3 us
:3.3% 的时间用于“用户程序”(比如你运行的终端、图形界面等应用);0.0 sy
:0% 的时间用于“系统内核”(内核处理硬件驱动、内存管理等底层工作);0.0 ni
:0% 的时间用于“优先级调整的进程”(nice
值控制进程优先级,此处无特殊优先级进程占 CPU);96.7 id
:96.7% 的时间 CPU 是“空闲”的(说明 CPU 大部分时间没事干,系统整体很闲);0.0 wa
:0% 的时间 CPU 在“等 IO(输入/输出)”(比如等硬盘读数据、网卡收包,IO 很顺畅);0.0 hi
/0.0 si
:硬中断、软中断的 CPU 时间占比为 0%(硬中断是硬件紧急响应,软中断是系统内部异步事件,此处都没占用 CPU);0.0 st
:0% 的时间是“被虚拟机 hypervisor 抢占的 CPU 时间”(若为物理机,这一项通常为 0;若为虚拟机,此值表示被宿主机抢走的时间,此处说明是物理机或虚拟机未被抢占)。
四、内存与交换分区(KiB Mem / KiB Swap)
-
物理内存(Mem):
1025492 total
:物理内存总容量约 1GB(单位 KiB,1GB≈1048576 KiB,接近 1GB);844496 used
:已用内存约 824MB;180996 free
:空闲内存约 176MB;7260 buffers
:约 7MB 用作“缓冲区”(临时存硬盘/网卡数据,加速 IO)。
-
交换分区(Swap):
1046524 total
:交换分区(虚拟内存)总容量约 1GB;295824 used
:已用交换分区约 288MB(物理内存不足时,会把数据临时放交换分区,此处使用量不高);750700 free
:空闲交换分区约 733MB;249084 cached Mem
:约 243MB 是“缓存”(系统把常用数据暂存内存加速访问,属于“可回收”内存,不算真正压力)。
五、进程列表(表头 + 具体进程)
表头解释:
PID
:Process ID,进程唯一标识(每个进程的“身份证号”);USER
:进程所属的用户;PR
:Priority,进程优先级(数值越小,优先级越高,越容易抢占 CPU);NI
:Nice 值,调整进程优先级的参数(范围 -20 ~ 19,值越小,进程优先级越高);VIRT
:Virtual Memory,进程使用的虚拟内存总量(包含程序代码、已分配但未使用的内存等);RES
:Resident Memory,进程实际占用的物理内存(常驻内存,不包括交换出去的部分);SHR
:Shared Memory,进程与其他进程共享的内存量;S
:Status,进程状态(S
表示“睡眠/等待”,R
表示“运行”,Z
表示“僵尸”等);%CPU
:进程当前的 CPU 占用率;%MEM
:进程当前的物理内存占用率;TIME+
:进程累计占用的 CPU 时间(更精确的格式);COMMAND
:进程对应的命令/程序名。
关键进程解读:
-
PID 2346
(用户linux
,命令compiz
):
Ubuntu 桌面的窗口管理器(负责图形特效、窗口布局等),占10.4%
内存(图形界面的主要内存消耗者,属于正常现象),CPU 占用0.3%
,已运行23.59
秒。 -
PID 1311
/PID 2403
(用户root
/linux
,命令vmtoolsd
):
虚拟机工具进程(若系统运行在虚拟机中,用于增强虚拟机与宿主机的交互),资源占用较低。 -
PID 2619
(用户linux
,命令gnome-termi+
):
截断显示的gnome-terminal
(终端程序),是你当前操作的终端,占1.1%
内存、0.3%
CPU。 -
PID 1
(用户root
,命令init
):
系统1 号进程,负责启动系统服务,是所有进程的“祖先”,资源占用极低。 -
其他
root
用户的内核线程(如kthreadd
、ksoftirqd
等):
系统底层核心进程,负责 CPU 调度、中断处理等基础工作,通常资源占用低,保障系统稳定运行。
整体结论
系统运行稳定、资源充足:CPU 空闲率高达 96.7%,内存和交换分区压力小,进程以桌面环境、虚拟机工具和系统核心进程为主,无异常高占用的“流氓进程”,属于健康且空闲的状态。
pstree命令
-
将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以init这个基本进程为根,如果有指定使用者id, 则树状图会只显示该使用者所拥有的进程。
-
参数:
- -a 显示该进程的完整指令及参数, 如果是被记忆体置换出去的进程则会加上括号
- -c 如果有重覆的进程名, 则分开列出
3.3 使用kill命令终止进程
kill
是 Linux 中用于**向进程发送“信号(Signal)”**的命令,通过信号控制进程行为(如退出、重启、暂停等),并非只能“杀死”进程。以下是核心用法:
一、基本语法
kill [选项] 信号 进程ID(PID)...
[选项]
:控制信号发送的行为(如查看信号、指定信号方式)。信号
:可通过编号(如9
)或名称(如SIGKILL
)指定。进程ID(PID)
:进程的唯一标识,可通过ps
、pgrep
等命令查询。
二、常用选项
选项 | 作用 | 示例 |
---|---|---|
-l | 列出所有信号的名称与编号 | kill -l (输出类似 1) SIGHUP 2) SIGINT...9) SIGKILL... ) |
-s 信号名 | 指定信号名称发送 | kill -s SIGTERM 1234 (给 PID 1234 发“优雅终止”信号) |
-n 信号编号 | 指定信号编号发送 | kill -n 15 1234 (效果同上,SIGTERM 编号为 15) |
-9 | 发送 SIGKILL (强制终止进程,最常用“强杀”) | kill -9 1234 (进程无法忽略,直接被终止) |
-0 | 检查进程是否存在(不发信号) | kill -0 1234 (进程存在则无输出,否则报错) |
-v | 详细模式(显示信号发送结果) | kill -v -s SIGTERM 1234 (提示信号是否发送成功) |
三、核心信号(进程对信号的响应)
信号是 kill
的核心,不同信号让进程执行不同操作。常用核心信号:
信号编号 | 信号名称 | 作用 | 特点 |
---|---|---|---|
1 | SIGHUP | 挂起/重启进程 | 常用于守护进程(如 Nginx)重新加载配置,无需停止服务 |
2 | SIGINT | 中断进程 | 等同于终端按 Ctrl+C ,进程通常会“优雅退出” |
9 | SIGKILL | 强制终止进程 | 进程无法忽略/捕获,直接被内核终止(慎用,可能丢失数据) |
15 | SIGTERM | 终止进程(默认信号) | 进程可选择忽略/捕获,是“优雅终止”的首选(给进程清理资源的机会) |
18 | SIGCONT | 继续运行进程 | 恢复被 SIGSTOP 暂停的进程 |
19 | SIGSTOP | 暂停进程 | 等同于终端按 Ctrl+Z ,进程暂时停止、不占 CPU |
四、实战示例
1. 优雅终止进程(默认发 SIGTERM
)
kill 1234 # 给 PID 1234 的进程发 SIGTERM,请求优雅退出
2. 强制终止进程(发 SIGKILL
)
kill -9 1234 # 或 kill -s SIGKILL 1234,强制终止进程
3. 重启进程(以 Nginx 为例,发 SIGHUP
)
kill -1 $(pgrep nginx) # pgrep 查 Nginx PID,再发 SIGHUP 让其重载配置
在 kill -1 $(pgrep nginx)
中,$
是 Linux Shell(如 bash)“命令替换”语法的一部分,具体作用是:
核心逻辑:“先执行子命令,再替换结果”
$(...)
会先运行括号内的 pgrep nginx
命令,然后将 pgrep nginx
的输出结果,替换回 $(...)
所在的位置,最终让 kill
命令作用于这些结果。
分步解释这条命令:
-
执行
pgrep nginx
:
pgrep
是专门用于**根据进程名查找“进程ID(PID)”**的命令。运行后,它会找出所有名称为nginx
的进程,并输出这些进程的 PID(比如假设输出1234
)。 -
命令替换
$(pgrep nginx)
:
Shell 会把pgrep nginx
的输出(如1234
),替换到$(...)
的位置。此时命令会变成kill -1 1234
。 -
执行
kill -1 1234
:
kill -1
会向 PID 为1234
的进程发送SIGHUP
信号(信号 1),而 nginx 收到SIGHUP
后,通常会重新加载配置文件(实现“优雅重启”,无需停止服务)。
总结
$
参与的 $(...)
语法,让你可以把“查进程ID”和“发信号控制进程”两个操作合并成一条命令,自动化完成“先找 nginx 进程,再向它发信号”的流程。
4. 暂停与恢复进程
kill -19 1234 # 暂停 PID 1234 的进程(类似 Ctrl+Z)
kill -18 1234 # 恢复被暂停的进程
5. 批量终止同名进程(结合 pkill
)
若不知道 PID 但知道进程名(如 firefox
),用 pkill
按名匹配:
pkill -9 firefox # 强制终止所有名为 firefox 的进程
五、注意事项
- 权限:普通用户只能终止自己的进程;
root
(或sudo
)可终止任意进程。 - 信号优先级:优先用
SIGTERM
(给进程清理资源的机会),无响应时再用SIGKILL
强制终止。 - 僵尸进程:状态为
Z
的僵尸进程无法用kill
终止,需重启其父进程回收资源。 - 暂停的进程:被
SIGSTOP
暂停的进程,需先用SIGCONT
恢复,再终止。
掌握这些后,你可以灵活用 kill
精细化控制进程行为~