进程管理 #
一、进程基础概念 #
1.1 什么是进程 #
进程是程序在计算机上的一次执行过程,是系统进行资源分配和调度的基本单位。
进程属性:
- PID:进程 ID,唯一标识
- PPID:父进程 ID
- UID:用户 ID
- 状态:运行、睡眠、停止、僵尸
- 优先级:进程调度优先级
1.2 进程状态 #
| 状态 | 标识 | 说明 |
|---|---|---|
| 运行 | R | 正在运行或等待运行 |
| 睡眠 | S | 可中断睡眠 |
| 磁盘睡眠 | D | 不可中断睡眠 |
| 停止 | T | 暂停运行 |
| 僵尸 | Z | 已终止但未被回收 |
1.3 前台与后台 #
bash
# 前台运行
./script.sh
# 后台运行
./script.sh &
# 查看后台任务
jobs
# 将前台任务放到后台
Ctrl + Z
bg
# 将后台任务放到前台
fg %1
二、ps - 查看进程 #
2.1 基本用法 #
bash
# 查看当前终端进程
ps
# 查看所有进程
ps -e
ps -A
# 查看详细信息
ps -ef
# BSD 风格
ps aux
2.2 输出格式 #
ps aux 输出解读:
text
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169424 11200 ? Ss Mar01 0:05 /sbin/init
| 字段 | 说明 |
|---|---|
| USER | 用户 |
| PID | 进程 ID |
| %CPU | CPU 使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小 |
| RSS | 物理内存大小 |
| TTY | 终端 |
| STAT | 状态 |
| START | 启动时间 |
| TIME | CPU 时间 |
| COMMAND | 命令 |
ps -ef 输出解读:
text
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Mar01 ? 00:00:05 /sbin/init
| 字段 | 说明 |
|---|---|
| UID | 用户 ID |
| PID | 进程 ID |
| PPID | 父进程 ID |
| C | CPU 使用率 |
| STIME | 启动时间 |
| TTY | 终端 |
| TIME | CPU 时间 |
| CMD | 命令 |
2.3 自定义输出 #
bash
# 指定输出列
ps -eo pid,ppid,user,%cpu,%mem,cmd
# 按列排序
ps -eo pid,%cpu,cmd --sort=-%cpu
# 显示线程
ps -eLf
# 显示进程树
ps -ejH
ps axjf
2.4 进程过滤 #
bash
# 按用户过滤
ps -u root
# 按进程名过滤
ps -C nginx
# 按 PID 过滤
ps -p 1234
# 按终端过滤
ps -t pts/0
# 组合过滤
ps -u root -C nginx
2.5 实用示例 #
bash
# 查看占用 CPU 最多的进程
ps aux --sort=-%cpu | head -10
# 查看占用内存最多的进程
ps aux --sort=-%mem | head -10
# 查看指定用户的进程
ps -u www-data
# 查看进程树
ps -ef --forest
# 查看线程数
ps -o pid,comm,thcount
# 查看进程启动时间
ps -eo pid,lstart,cmd
三、top - 动态监控 #
3.1 基本用法 #
bash
# 启动 top
top
# 指定刷新间隔(秒)
top -d 5
# 监控指定用户
top -u username
# 监控指定进程
top -p 1234,5678
3.2 交互命令 #
全局命令:
| 命令 | 功能 |
|---|---|
| q | 退出 |
| h | 帮助 |
| Space | 立即刷新 |
| k | 终止进程 |
| r | 调整优先级 |
| z | 彩色显示 |
| B | 粗体显示 |
排序命令:
| 命令 | 功能 |
|---|---|
| P | 按 CPU 排序 |
| M | 按内存排序 |
| N | 按 PID 排序 |
| T | 按时间排序 |
显示命令:
| 命令 | 功能 |
|---|---|
| 1 | 显示所有 CPU |
| c | 显示完整命令 |
| f | 选择显示字段 |
| o | 调整字段顺序 |
| S | 累计模式 |
| H | 显示线程 |
3.3 输出解读 #
text
top - 10:00:00 up 10 days, 2:00, 2 users, load average: 0.00, 0.01, 0.05
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 8000.0 total, 500.0 free, 2000.0 used, 5500.0 buff/cache
MiB Swap: 2000.0 total, 1900.0 free, 100.0 used. 5500.0 avail Mem
第一行:系统信息
- 当前时间、运行时间、用户数、负载均衡
第二行:进程信息
- 总进程数、运行、睡眠、停止、僵尸进程数
第三行:CPU 信息
- us:用户空间
- sy:内核空间
- ni:nice 进程
- id:空闲
- wa:等待 IO
- hi:硬中断
- si:软中断
第四行:内存信息
- total:总内存
- free:空闲内存
- used:已用内存
- buff/cache:缓冲/缓存
3.4 批处理模式 #
bash
# 批处理模式输出
top -b -n 1
# 输出到文件
top -b -n 1 > top.txt
# 持续监控并保存
top -b -n 10 -d 5 > top.log
# 只显示一次
top -b -n 1 | head -20
四、htop - 增强版 top #
4.1 安装与启动 #
bash
# 安装
sudo apt install htop
sudo yum install htop
# 启动
htop
4.2 交互命令 #
| 命令 | 功能 |
|---|---|
| F1 | 帮助 |
| F2 | 设置 |
| F3 | 搜索 |
| F4 | 过滤 |
| F5 | 树形显示 |
| F6 | 排序 |
| F7 | 降低优先级 |
| F8 | 提高优先级 |
| F9 | 终止进程 |
| F10 | 退出 |
4.3 htop 优势 #
- 彩色显示,界面友好
- 支持鼠标操作
- 横向/纵向滚动
- 树形进程显示
- 快捷键更直观
五、kill - 终止进程 #
5.1 基本用法 #
bash
# 基本语法
kill PID
# 发送指定信号
kill -信号 PID
# 常用信号
kill -9 PID # SIGKILL,强制终止
kill -15 PID # SIGTERM,正常终止(默认)
kill -1 PID # SIGHUP,重新加载
kill -2 PID # SIGINT,中断(Ctrl+C)
5.2 信号列表 #
bash
# 查看所有信号
kill -l
# 常用信号
1) SIGHUP 重新加载配置
2) SIGINT 中断(Ctrl+C)
9) SIGKILL 强制终止
15) SIGTERM 正常终止
18) SIGCONT 继续运行
19) SIGSTOP 暂停运行
5.3 其他终止命令 #
bash
# killall - 按进程名终止
killall nginx
killall -9 nginx
# pkill - 按模式匹配终止
pkill nginx
pkill -u user nginx
pkill -f "python script.py"
# xkill - 图形界面终止
xkill
5.4 实用示例 #
bash
# 终止占用 CPU 高的进程
ps aux --sort=-%cpu | head -2 | tail -1 | awk '{print $2}' | xargs kill
# 终止指定用户的所有进程
pkill -u username
# 终止僵尸进程的父进程
ps aux | awk '$8 ~ /Z/ {print $2}' | xargs kill
# 安全终止进程(先尝试 15,再尝试 9)
kill PID && sleep 2 && kill -9 PID
六、进程优先级 #
6.1 nice - 启动时设置优先级 #
bash
# 查看默认 nice 值
nice
# 以优先级 10 启动
nice -n 10 ./script.sh
# 以最高优先级启动(需要 root)
nice -n -20 ./script.sh
# 以最低优先级启动
nice -n 19 ./script.sh
6.2 renice - 修改运行中进程优先级 #
bash
# 修改进程优先级
renice -n 5 -p 1234
# 修改用户所有进程
renice -n 5 -u username
# 修改进程组
renice -n 5 -g groupname
6.3 优先级范围 #
- 范围:-20 到 19
- -20:最高优先级
- 19:最低优先级
- 默认:0
bash
# 查看进程优先级
ps -eo pid,ni,comm
# 查看并排序
ps -eo pid,ni,comm --sort=-ni
七、后台任务管理 #
7.1 jobs - 查看后台任务 #
bash
# 查看后台任务
jobs
# 查看任务 PID
jobs -l
# 输出示例
[1]+ Running ./script.sh &
[2]- Stopped vim file.txt
7.2 bg - 后台运行 #
bash
# 将暂停的任务放到后台运行
bg %1
# 启动时后台运行
./script.sh &
7.3 fg - 前台运行 #
bash
# 将后台任务放到前台
fg %1
# 将最近的任务放到前台
fg
7.4 nohup - 忽略挂断信号 #
bash
# 后台运行,不随终端关闭而终止
nohup ./script.sh &
# 指定输出文件
nohup ./script.sh > output.log 2>&1 &
# 查看输出
tail -f nohup.out
7.5 disown - 移除任务 #
bash
# 将任务从 shell 移除
disown %1
# 移除所有任务
disown -a
# 移除并保持运行
disown -h %1
八、进程监控工具 #
8.1 pgrep - 查找进程 #
bash
# 查找进程 PID
pgrep nginx
# 显示进程名
pgrep -l nginx
# 显示完整命令
pgrep -a nginx
# 按用户查找
pgrep -u root nginx
# 按终端查找
pgrep -t pts/0
# 反向匹配
pgrep -v nginx
8.2 pidof - 查找进程 ID #
bash
# 查找进程 ID
pidof nginx
# 只返回一个 PID
pidof -s nginx
# 排除指定 PID
pidof -o 1234 nginx
8.3 pstree - 进程树 #
bash
# 显示进程树
pstree
# 显示 PID
pstree -p
# 显示命令参数
pstree -a
# 显示用户
pstree -u
# 高亮显示
pstree -h
# 指定进程
pstree -p 1234
8.4 watch - 周期执行 #
bash
# 每隔 2 秒执行一次
watch -n 2 'ps aux | grep nginx'
# 高亮变化
watch -d 'ps aux | grep nginx'
# 显示时间
watch -t 'date'
九、实践练习 #
9.1 练习一:进程查看 #
bash
# 1. 查看所有进程
ps aux
# 2. 查看进程树
pstree -p
# 3. 查看占用 CPU 最多的进程
ps aux --sort=-%cpu | head -10
# 4. 查看占用内存最多的进程
ps aux --sort=-%mem | head -10
# 5. 查看指定用户的进程
ps -u $USER
9.2 练习二:进程控制 #
bash
# 1. 启动后台任务
sleep 100 &
# 2. 查看后台任务
jobs -l
# 3. 将后台任务放到前台
fg %1
# 4. 暂停任务(Ctrl+Z)
# 5. 继续后台运行
bg %1
# 6. 终止任务
kill %1
9.3 练习三:进程监控 #
bash
# 1. 启动 top 监控
top
# 2. 按 CPU 排序(按 P)
# 3. 按内存排序(按 M)
# 4. 显示所有 CPU(按 1)
# 5. 退出(按 q)
# 6. 使用 htop 监控
htop
9.4 练习四:进程管理 #
bash
# 1. 查找 nginx 进程
pgrep -l nginx
# 2. 终止 nginx 进程
sudo killall nginx
# 3. 以低优先级运行脚本
nice -n 10 ./script.sh &
# 4. 修改进程优先级
renice -n 5 -p $(pgrep script.sh)
# 5. 使用 nohup 运行脚本
nohup ./script.sh > output.log 2>&1 &
十、小结 #
本章学习了 Linux 进程管理的核心命令,包括进程查看、监控、控制和优先级管理。
关键要点:
ps用于查看进程快照top/htop用于动态监控进程kill用于终止进程,注意信号选择nice/renice用于调整进程优先级nohup用于后台长期运行任务
下一章预告: 用户管理 - 学习用户和用户组的管理命令。
最后更新:2026-03-27