在 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. top 和 htop:交互式实时监控
ps 只是一个瞬间快照,要看实时变化可以启动 top。
- 执行
top后,屏幕会以固定频率(默认 3 秒)刷新显示各进程的 CPU、内存占用。常用交互键: P:按 CPU 使用率降序排列。M:按物理内存 RES 使用量降序排列。k:杀死一个进程(需要输入 PID 和信号)。q:退出。
top 虽然功能足够,但界面略显生硬。htop 是一个增强的进程查看器,提供了更人性化的彩色界面,支持鼠标点击、横向/纵向滚动、树形视图(按 F5)查看进程父子关系,以及更便捷的搜索和过滤功能。很多现代 Linux 系统上 htop 都是首选的实时监控工具。如果没有安装,用包管理器(apt install htop 或 yum install htop)轻松添加。
3. pgrep 和 pidof:快速查找进程 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 占用率持续很高,想追踪它到底在做什么,可以这样操作:
- 找到 PID:
pgrep worker假设返回25250。 - 快速查看基本信息:
ps -p 25250 -o pid,user,%cpu,%mem,comm。 - 查看它打开的文件:
ls -l /proc/25250/fd,可能会发现它正在读写某个巨大的临时文件产生 I/O 等待。 - 查看当前运行状态:
cat /proc/25250/status | grep -E "State|Threads",判断是否多线程和是否处于 D 状态(不可中断睡眠,通常表示在等磁盘)。 - 动态监控:在
htop中按F4输入worker过滤,持续观察 CPU 和内存趋势。
掌握这些基本的进程查看手段后,你就能够从容地面对绝大多数系统状态查询和初步的故障定位场景。记住,没有单一工具可以覆盖所有细节,但组合得当,这些命令就像手术台上的检查仪器一样,让你对系统内部的运行一目了然。