Skip to content

进程管理

什么是进程?

进程是正在运行的程序的实例。每个进程都有唯一的进程 ID(PID),占用一定的系统资源(CPU、内存等)。

进程相关概念

进程状态

状态符号说明
RunningR正在运行或在运行队列中
SleepingS可中断睡眠,等待事件
Uninterruptible SleepD不可中断睡眠,通常等待 I/O
StoppedT被信号停止
ZombieZ已终止但未被父进程回收

进程类型

  • 前台进程:占用终端,直到完成
  • 后台进程:在后台运行,不占用终端
  • 守护进程:系统服务,长期在后台运行

查看进程

ps - 进程快照

bash
# 当前终端进程
$ ps
  PID TTY          TIME CMD
 1234 pts/0    00:00:00 bash
 5678 pts/0    00:00:00 ps

# 所有进程(标准语法)
$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan09 ?        00:00:01 /sbin/init
root         2     0  0 Jan09 ?        00:00:00 [kthreadd]
maxwell   1234  1233  0 10:00 pts/0    00:00:00 bash

# 所有进程(BSD 语法)
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169512 11284 ?        Ss   Jan09   0:01 /sbin/init
maxwell   1234  0.0  0.0  21388  5364 pts/0    Ss   10:00   0:00 bash

# 显示进程树
$ ps -ef --forest
$ ps auxf

# 指定显示列
$ ps -eo pid,ppid,user,%cpu,%mem,stat,cmd

# 按 CPU 使用率排序
$ ps aux --sort=-%cpu | head

# 按内存使用率排序
$ ps aux --sort=-%mem | head

# 查找特定进程
$ ps aux | grep nginx
$ ps -ef | grep nginx

ps 输出说明

说明
PID进程 ID
PPID父进程 ID
USER进程所有者
%CPUCPU 使用率
%MEM内存使用率
VSZ虚拟内存大小
RSS实际内存大小
TTY终端
STAT进程状态
START启动时间
TIMECPU 时间
COMMAND命令

top - 动态进程监控

bash
$ top
top - 10:30:00 up 5 days,  3:00,  2 users,  load average: 0.15, 0.10, 0.05
Tasks: 200 total,   1 running, 199 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  1.0 sy,  0.0 ni, 96.5 id,  0.5 wa,  0.0 hi,  0.0 si
MiB Mem :  16000.0 total,   8000.0 free,   4000.0 used,   4000.0 buff/cache
MiB Swap:   2000.0 total,   2000.0 free,      0.0 used.  11000.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 maxwell   20   0  500000  50000  30000 S   5.0   0.3   0:10.50 firefox
 5678 root      20   0  100000  10000   5000 S   2.0   0.1   0:05.00 systemd

top 交互命令

按键功能
q退出
h帮助
P按 CPU 排序
M按内存排序
N按 PID 排序
T按运行时间排序
k终止进程
r调整优先级
u显示指定用户
1显示每个 CPU
c显示完整命令
s修改刷新间隔

htop - 增强版 top

bash
# 安装
$ sudo apt install htop

# 运行
$ htop

特点:

  • 彩色显示
  • 鼠标支持
  • 垂直和水平滚动
  • 树形视图
  • 直接搜索和过滤

pgrep - 按名称查找进程

bash
# 按名称查找 PID
$ pgrep nginx
1234
5678

# 显示进程名
$ pgrep -l nginx
1234 nginx
5678 nginx

# 完整命令匹配
$ pgrep -f "python script.py"

# 按用户查找
$ pgrep -u maxwell

# 最新的进程
$ pgrep -n nginx

# 最旧的进程
$ pgrep -o nginx

pidof - 获取 PID

bash
$ pidof nginx
1234 5678

控制进程

kill - 发送信号

bash
# 默认发送 SIGTERM(15)
$ kill PID
$ kill 1234

# 强制终止 SIGKILL(9)
$ kill -9 PID
$ kill -KILL PID

# 重新加载配置 SIGHUP(1)
$ kill -1 PID
$ kill -HUP PID

# 发送到多个进程
$ kill 1234 5678 9012

常用信号

信号数字说明
SIGHUP1挂起,常用于重新加载配置
SIGINT2中断(Ctrl+C)
SIGQUIT3退出(Ctrl+\)
SIGKILL9强制终止,不可捕获
SIGTERM15终止,默认信号
SIGSTOP19停止进程
SIGCONT18继续运行
bash
# 列出所有信号
$ kill -l

killall - 按名称终止

bash
# 终止所有同名进程
$ killall nginx

# 强制终止
$ killall -9 nginx

# 交互确认
$ killall -i nginx

# 按用户终止
$ killall -u maxwell

pkill - 按模式终止

bash
# 按名称终止
$ pkill nginx

# 按完整命令
$ pkill -f "python script.py"

# 按用户
$ pkill -u maxwell

# 发送指定信号
$ pkill -HUP nginx

前后台控制

后台运行

bash
# 后台运行命令
$ command &
$ sleep 100 &
[1] 1234

# 查看后台作业
$ jobs
[1]+  Running                 sleep 100 &

# 将命令放入后台运行
$ command
Ctrl+Z        # 暂停
$ bg          # 在后台继续运行

前台运行

bash
# 将后台作业调到前台
$ fg
$ fg %1       # 指定作业号

# 查看作业
$ jobs
[1]-  Running                 sleep 100 &
[2]+  Stopped                 vim file.txt

nohup - 免挂断运行

bash
# 运行命令,即使终端关闭也继续
$ nohup command &
$ nohup ./script.sh &

# 输出重定向
$ nohup command > output.log 2>&1 &

# 查看输出
$ cat nohup.out

disown - 解除与终端关联

bash
# 先后台运行
$ command &

# 解除关联
$ disown

# 或直接
$ disown %1

进程优先级

nice - 启动时设置优先级

bash
# nice 值范围:-20(最高优先级)到 19(最低优先级)
# 默认值为 0

# 低优先级运行
$ nice -n 10 command

# 高优先级运行(需要 root)
$ sudo nice -n -10 command

# 最低优先级
$ nice -n 19 command

renice - 修改运行中进程优先级

bash
# 修改进程优先级
$ renice 10 -p 1234

# 修改用户所有进程优先级
$ renice 5 -u maxwell

# 修改组进程优先级
$ renice 5 -g groupname

# 提高优先级(需要 root)
$ sudo renice -10 -p 1234

监控系统资源

free - 内存使用

bash
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           16Gi       4.0Gi       8.0Gi       500Mi       4.0Gi        11Gi
Swap:         2.0Gi          0B       2.0Gi

# 持续监控
$ watch free -h

uptime - 系统负载

bash
$ uptime
 10:30:00 up 5 days,  3:00,  2 users,  load average: 0.15, 0.10, 0.05

vmstat - 虚拟内存统计

bash
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 8000000 200000 4000000  0    0     5    10   50  100  2  1 97  0  0

# 每 2 秒刷新
$ vmstat 2

iostat - I/O 统计

bash
# 安装 sysstat
$ sudo apt install sysstat

$ iostat
Linux 5.15.0-generic    01/09/2025  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.00    0.00    1.00    0.50    0.00   96.50

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              10.00        50.00       100.00    1000000    2000000

/proc 文件系统

bash
# 查看进程信息
$ cat /proc/1234/status
Name:   bash
State:  S (sleeping)
Pid:    1234
PPid:   1233
...

# 查看命令行
$ cat /proc/1234/cmdline

# 查看环境变量
$ cat /proc/1234/environ

# 查看打开的文件
$ ls -l /proc/1234/fd

# 查看内存映射
$ cat /proc/1234/maps

# 系统信息
$ cat /proc/cpuinfo
$ cat /proc/meminfo
$ cat /proc/version

实用技巧

查找占用资源最多的进程

bash
# CPU 最高的 10 个进程
$ ps aux --sort=-%cpu | head -11

# 内存最高的 10 个进程
$ ps aux --sort=-%mem | head -11

查找僵尸进程

bash
$ ps aux | grep Z
$ ps aux | awk '$8=="Z"'

监控特定进程

bash
# 使用 watch
$ watch -n 1 "ps -p 1234 -o pid,ppid,%cpu,%mem,cmd"

# 使用 top
$ top -p 1234

查看进程打开的文件

bash
$ lsof -p 1234
$ ls -l /proc/1234/fd

查看端口占用

bash
$ lsof -i :80
$ ss -tlnp | grep :80
$ netstat -tlnp | grep :80

小结

本章介绍了 Linux 进程管理:

  • 查看进程pstophtoppgrep
  • 控制进程killkillallpkill
  • 前后台控制&fgbgjobsnohup
  • 优先级nicerenice
  • 系统监控freevmstatiostat

掌握进程管理是系统管理和故障排查的基础技能。


上一章:用户管理

下一章:软件包管理