进程管理 #

一、进程基础概念 #

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 进程管理的核心命令,包括进程查看、监控、控制和优先级管理。

关键要点:

  1. ps 用于查看进程快照
  2. top/htop 用于动态监控进程
  3. kill 用于终止进程,注意信号选择
  4. nice/renice 用于调整进程优先级
  5. nohup 用于后台长期运行任务

下一章预告: 用户管理 - 学习用户和用户组的管理命令。

最后更新:2026-03-27