人人都会AI编程

10.1 进程查看

更新时间:2026-07-12

在 Linux 系统中,进程是正在运行的程序实例。了解如何查看和管理进程,是日常系统维护、性能分析和故障排查的基本功。Linux 提供了多个实用工具来查看进程状态,从简明的静态快照到实时的动态监控,不同场景可以选择最顺手的那一个。

1. ps:进程快照

ps(process snapshot)是最经典的进程查看命令,显示执行命令那一刻的进程状态。它本身有大量选项,通常配合 grep 使用来过滤关注的信息。

常用组合:

  • ps aux:显示系统中所有用户的进程,信息丰富。
  ps aux | head -5
  USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  root         1  0.0  0.1 169088 10144 ?        Ss   Oct10   0:15 /sbin/init
  

这里每一列分别表示:运行用户、进程 ID、CPU 占用、内存占用、虚拟内存大小、物理内存大小、终端、状态码、启动时间、累计 CPU 时间和命令名。其中 STAT 列用字母表示进程状态——S 表示可中断睡眠(多数进程在等待事件时处于此状态),R 表示正在运行或就绪,D 表示不可中断睡眠(通常是在等待 I/O),Z 表示僵尸进程。了解这些状态码有助于快速判断一个进程是否卡在 I/O 操作上或者已经异常终止。

  • ps -ef:另一种常见风格,用标准语法显示所有进程,更适合管道操作。
  ps -ef | grep nginx
  

可以快速找出与 nginx 相关的进程和它们的父进程 ID(PPID)。

  • 按用户过滤ps -u username 只显示某个用户的进程。
  • grep 配合使用时,注意 grep 本身会出现在结果中,可以加上 | grep -v grep 排除,或使用 pgrep(见下文)更干净。

2. tophtop:交互式实时监控

ps 只是一个瞬间快照,要看实时变化可以启动 top

  • 执行 top 后,屏幕会以固定频率(默认 3 秒)刷新显示各进程的 CPU、内存占用。常用交互键:
  • P:按 CPU 使用率降序排列。
  • M:按物理内存 RES 使用量降序排列。
  • k:杀死一个进程(需要输入 PID 和信号)。
  • q:退出。

top 虽然功能足够,但界面略显生硬。htop 是一个增强的进程查看器,提供了更人性化的彩色界面,支持鼠标点击、横向/纵向滚动、树形视图(按 F5)查看进程父子关系,以及更便捷的搜索和过滤功能。很多现代 Linux 系统上 htop 都是首选的实时监控工具。如果没有安装,用包管理器(apt install htopyum install htop)轻松添加。

3. pgreppidof:快速查找进程 ID

当只需要根据名称或属性获取进程 PID 时,直接使用 pgrep 非常高效:

  • pgrep nginx 直接列出所有包含“nginx”的进程 ID。
  • pgrep -u www-data 列出所有属于 www-data 用户的进程。
  • pgrep -f 'python myscript.py' 按完整命令行搜索,适合找出特定脚本的进程。

pidof 更简单,只返回进程名对应的 PID(例如 pidof sshd),适合在脚本中快速获取 PID 并赋值给变量。

4. /proc 文件系统:进程的源代码级视图

每个正在运行的进程在 /proc 目录下都有一个以它的 PID 命名的子目录,里面包含该进程的所有元数据。例如,对于 PID 为 1234 的进程:

  • /proc/1234/cmdline:启动该进程的完整命令行。
  • /proc/1234/environ:进程的环境变量(cat /proc/1234/environ | tr '\0' '\n' 可读性更好)。
  • /proc/1234/fd/:进程打开的所有文件描述符,每个都是一个符号链接指向实际文件或套接字。
  • /proc/1234/limits:该进程的资源限制。
  • /proc/1234/status:包含进程名、状态、内存使用等人类可读的摘要信息。

当你需要了解某个进程打开的文件列表、怀疑文件描述符泄漏,或者查看环境变量时,/proc 提供了极尽详细的数据,不需要额外安装工具。

5. 组合使用:实际排查演示

假设你发现一个名为 worker 的进程 CPU 占用率持续很高,想追踪它到底在做什么,可以这样操作:

  1. 找到 PIDpgrep worker 假设返回 25250
  2. 快速查看基本信息ps -p 25250 -o pid,user,%cpu,%mem,comm
  3. 查看它打开的文件ls -l /proc/25250/fd,可能会发现它正在读写某个巨大的临时文件产生 I/O 等待。
  4. 查看当前运行状态cat /proc/25250/status | grep -E "State|Threads",判断是否多线程和是否处于 D 状态(不可中断睡眠,通常表示在等磁盘)。
  5. 动态监控:在 htop 中按 F4 输入 worker 过滤,持续观察 CPU 和内存趋势。

掌握这些基本的进程查看手段后,你就能够从容地面对绝大多数系统状态查询和初步的故障定位场景。记住,没有单一工具可以覆盖所有细节,但组合得当,这些命令就像手术台上的检查仪器一样,让你对系统内部的运行一目了然。