进程管理 #
进程基础 #
什么是进程 #
text
┌─────────────────────────────────────────────────────────────┐
│ 进程概念 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 进程是正在运行的程序实例 │
│ │
│ 进程属性: │
│ ├── PID (Process ID):进程标识符 │
│ ├── PPID (Parent PID):父进程 ID │
│ ├── UID:用户 ID │
│ ├── GID:组 ID │
│ ├── 状态:运行、睡眠、停止、僵尸 │
│ ├── 优先级:进程调度优先级 │
│ └── 资源:CPU、内存、文件描述符 │
│ │
│ 进程状态: │
│ R 运行 (Running) │
│ S 睡眠 (Sleeping) │
│ D 不可中断睡眠 (Disk sleep) │
│ Z 僵尸 (Zombie) │
│ T 停止 (Stopped) │
│ I 空闲 (Idle) │
│ │
└─────────────────────────────────────────────────────────────┘
ps - 查看进程 #
基本用法 #
bash
# 查看当前终端进程
$ ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
# 查看所有进程
$ ps -e
$ ps -A
# 查看详细信息
$ ps -f
UID PID PPID C STIME TTY TIME CMD
user 1234 1233 0 10:00 pts/0 00:00:00 -bash
user 5678 1234 0 10:05 pts/0 00:00:00 ps -f
# 查看所有进程的完整信息
$ ps -ef
$ ps aux
常用选项 #
bash
# BSD 风格选项
$ ps aux
# a: 所有用户进程
# u: 显示用户信息
# x: 包括无终端进程
$ ps aux --sort=-%cpu # 按 CPU 使用率排序
$ ps aux --sort=-%mem # 按内存使用率排序
# POSIX 风格选项
$ ps -ef
# -e: 所有进程
# -f: 完整格式
$ ps -eF # 更详细的格式
$ ps -ely # 长格式
# 显示线程
$ ps -eLf # 显示线程
$ ps -T -p PID # 指定进程的线程
# 显示进程树
$ ps -ejH
$ ps --forest
输出字段说明 #
text
┌─────────────────────────────────────────────────────────────┐
│ ps 输出字段 │
├─────────────────────────────────────────────────────────────┤
│ │
│ USER 用户名 │
│ PID 进程 ID │
│ PPID 父进程 ID │
│ %CPU CPU 使用率 │
│ %MEM 内存使用率 │
│ VSZ 虚拟内存大小 (KB) │
│ RSS 物理内存大小 (KB) │
│ TTY 终端 │
│ STAT 进程状态 │
│ START 启动时间 │
│ TIME 累计 CPU 时间 │
│ COMMAND 命令名 │
│ │
│ STAT 状态码: │
│ D 不可中断睡眠 │
│ R 运行中 │
│ S 睡眠中 │
│ T 已停止 │
│ Z 僵尸进程 │
│ < 高优先级 │
│ N 低优先级 │
│ L 有页面锁定在内存 │
│ s 会话领导者 │
│ l 多线程 │
│ + 前台进程组 │
│ │
└─────────────────────────────────────────────────────────────┘
实用示例 #
bash
# 查找特定进程
$ ps aux | grep nginx
$ pgrep nginx
$ pgrep -l nginx
# 查看指定用户的进程
$ ps -u username
# 查看指定 PID 的进程
$ ps -p 1234
$ ps -p 1234 -o pid,ppid,cmd,%mem,%cpu
# 自定义输出格式
$ ps -eo pid,ppid,user,%cpu,%mem,cmd
# 按 CPU 使用率排序
$ ps aux --sort=-%cpu | head -10
# 按内存使用率排序
$ ps aux --sort=-%mem | head -10
# 查看进程树
$ ps -ef --forest
# 查看线程
$ ps -eLf | grep java
top - 实时进程监控 #
基本用法 #
bash
# 启动 top
$ top
# 指定刷新间隔
$ top -d 5
# 监控指定用户
$ top -u username
# 监控指定进程
$ top -p 1234,5678
# 批处理模式
$ top -b -n 1 > top_output.txt
交互命令 #
text
┌─────────────────────────────────────────────────────────────┐
│ top 交互命令 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 显示控制 │
│ h 显示帮助 │
│ q 退出 │
│ 1 显示所有 CPU 核心 │
│ c 显示完整命令行 │
│ i 忽略闲置和僵尸进程 │
│ S 累计模式 │
│ │
│ 排序 │
│ M 按内存使用排序 │
│ P 按 CPU 使用排序 │
│ T 按时间排序 │
│ N 按 PID 排序 │
│ R 反向排序 │
│ │
│ 进程操作 │
│ k 终止进程 │
│ r 调整优先级 │
│ z 彩色显示 │
│ x 高亮排序列 │
│ b 高亮运行进程 │
│ │
│ 过滤 │
│ u 按用户过滤 │
│ o 添加过滤条件 │
│ │
└─────────────────────────────────────────────────────────────┘
输出说明 #
text
top - 10:00:00 up 30 days, 2:15, 3 users, load average: 0.05, 0.10, 0.15
Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.0 us, 2.0 sy, 0.0 ni, 92.0 id, 0.5 wa, 0.0 hi, 0.5 si
MiB Mem : 8000.0 total, 500.0 free, 3000.0 used, 4500.0 buff/cache
MiB Swap: 2000.0 total, 1800.0 free, 200.0 used. 4500.0 avail Mem
# 第一行:系统时间、运行时间、用户数、负载均衡
# 第二行:进程统计
# 第三行:CPU 使用率
# 第四行:内存使用
# 第五行:交换空间使用
htop - 增强版进程监控 #
安装 #
bash
# Ubuntu/Debian
$ sudo apt install htop
# CentOS/RHEL
$ sudo yum install htop
# macOS
$ brew install htop
基本用法 #
bash
# 启动 htop
$ htop
# 指定用户
$ htop -u username
# 指定 PID
$ htop -p 1234,5678
# 只显示进程树
$ htop -t
# 延迟更新
$ htop -d 5
交互命令 #
text
┌─────────────────────────────────────────────────────────────┐
│ htop 交互命令 │
├─────────────────────────────────────────────────────────────┤
│ │
│ F1 帮助 │
│ F2 设置 │
│ F3 搜索 │
│ F4 过滤 │
│ F5 树形视图 │
│ F6 排序 │
│ F7 降低优先级 (nice +) │
│ F8 提高优先级 (nice -) │
│ F9 终止进程 │
│ F10 退出 │
│ │
│ 空格 标记进程 │
│ u 选择用户 │
│ l 显示打开的文件 │
│ s 跟踪系统调用 │
│ │
└─────────────────────────────────────────────────────────────┘
kill - 终止进程 #
基本用法 #
bash
# 发送信号给进程
$ kill PID
# 发送特定信号
$ kill -9 PID
$ kill -SIGKILL PID
# 列出所有信号
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
...
常用信号 #
text
┌─────────────────────────────────────────────────────────────┐
│ 常用信号 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 信号 编号 说明 │
│ ───────────────────────────────────────────────────── │
│ SIGHUP 1 挂起(重新加载配置) │
│ SIGINT 2 中断(Ctrl+C) │
│ SIGQUIT 3 退出 │
│ SIGKILL 9 强制终止(不可捕获) │
│ SIGTERM 15 正常终止(默认信号) │
│ SIGCONT 18 继续运行 │
│ SIGSTOP 19 暂停 │
│ │
└─────────────────────────────────────────────────────────────┘
实用示例 #
bash
# 正常终止进程
$ kill 1234
# 强制终止进程
$ kill -9 1234
# 重新加载配置
$ kill -HUP 1234
# 暂停进程
$ kill -STOP 1234
# 继续进程
$ kill -CONT 1234
# 终止所有匹配名称的进程
$ killall nginx
$ pkill nginx
# 按用户终止
$ pkill -u username
# 按名称模式终止
$ pkill -f "python script.py"
进程优先级 #
nice 和 renice #
bash
# 以指定优先级启动进程
$ nice -n 10 ./script.sh # 优先级降低 10
$ nice -n -5 ./script.sh # 优先级提高 5(需要 root)
# 修改运行中进程的优先级
$ renice 10 -p 1234 # PID 1234 优先级设为 10
$ renice -5 -p 1234 # PID 1234 优先级设为 -5
# 修改用户所有进程的优先级
$ renice 5 -u username
# 查看进程优先级
$ ps -eo pid,ni,cmd
# 优先级范围:-20(最高)到 19(最低)
# 默认优先级:0
后台进程管理 #
jobs、bg、fg #
bash
# 在后台运行命令
$ sleep 100 &
[1] 12345
# 查看后台任务
$ jobs
[1]+ Running sleep 100 &
# 暂停前台进程
Ctrl + Z
# 将暂停的进程放到后台
$ bg %1
# 将后台进程调到前台
$ fg %1
# 终止后台任务
$ kill %1
# 等待后台任务完成
$ wait
nohup - 忽略挂起信号 #
bash
# 后台运行,忽略挂起
$ nohup ./script.sh &
# 输出重定向
$ nohup ./script.sh > output.log 2>&1 &
# 查看输出
$ tail -f nohup.out
小结 #
通过本节学习,你应该掌握:
- 进程基础:PID、状态、优先级
- ps:查看进程状态
- top/htop:实时监控进程
- kill:终止进程
- nice/renice:调整优先级
- 后台管理:jobs、bg、fg、nohup
下一步,我们将学习用户管理命令。
最后更新:2026-04-11