在Linux系统中,进程是程序执行的基本单位,掌握进程检查方法对于系统管理、故障排查和性能优化至关重要,Linux提供了多种命令和工具来查看、监控和管理进程,这些工具各有侧重,适用于不同场景,本文将详细介绍常用的进程检查方法,包括命令格式、核心选项及实际应用案例。

使用ps命令查看静态进程列表
ps(process status)是最基础的进程查看命令,用于显示当前系统运行的进程快照,默认仅显示当前终端下的进程,通过组合不同选项,可获取详细的进程信息。
核心选项及功能
| 选项 | 说明 | 示例 |
|---|---|---|
-a |
显示所有终端下的进程(包括其他用户的进程) | ps -a |
-ef |
显示所有进程的完整信息(包括父进程ID、命令行等) | ps -ef |
-aux |
显示所有进程的详细信息(用户、CPU/内存占用、状态等),BSD格式 | ps -aux |
-u 用户名 |
仅显示指定用户的进程 | ps -u root |
-p PID |
仅显示指定PID的进程 | ps -p 1 |
-C 进程名 |
通过进程名筛选(如nginx) |
ps -C nginx |
--forest |
以树形结构显示进程父子关系 | ps -ef --forest |
示例输出解析
执行ps -aux后,输出字段包括:
USER:进程所有者PID:进程ID%CPU:CPU占用率%MEM:内存占用率VSZ:虚拟内存大小(KB)RSS:物理内存大小(KB)TTY:终端设备(表示无终端)STAT:进程状态(S休眠、R运行、Z僵尸、D不可中断休眠)START:启动时间COMMAND:启动命令
通过ps -C nginx可快速定位nginx进程的PID,结合grep可进一步筛选:
ps -C nginx | grep -v grep | awk '{print $2}' # 输出nginx的PID(排除grep自身)
使用top和htop实时监控进程
top和htop是动态监控工具,可实时刷新进程列表,适合观察进程的资源占用变化。
top命令
默认按CPU占用率降序排列,交互操作如下:
P:按CPU排序M:按内存排序k:终止指定PID的进程q:退出
常用选项:

-p PID:监控特定进程(如top -p 1)-d 秒数:刷新间隔(如top -d 2每2秒刷新)
htop命令(增强版)
htop是top的图形化增强版,支持鼠标操作、进程树形展示、颜色区分,更直观,需安装(如sudo apt install htop)。
核心功能:
- 左侧显示CPU、内存、Swap使用率
- 中间为进程列表,可按
F6选择排序字段 - 右侧显示运行队列、负载等信息
使用pgrep和pkill按名称管理进程
pgrep和pkill通过进程名或属性查找/终止进程,适合脚本自动化。
pgrep
-l:输出进程名而不仅是PID-u 用户名:筛选指定用户进程-f:匹配完整命令行(如pgrep -f "nginx -g daemon")
示例:
pgrep -l nginx # 输出所有nginx进程的PID和名称
pkill
-9:强制终止(相当于kill -9)-u 用户名:终止指定用户的所有进程-f:匹配完整命令行
示例:
pkill -9 nginx # 强制终止所有nginx进程
使用lsof查看进程与文件的关联
lsof(list open files)可查看进程打开的文件、网络端口等,适合排查端口占用或文件锁定问题。

核心选项
| 选项 | 说明 | 示例 |
|---|---|---|
-i :端口 |
查看占用指定端口的进程 | lsof -i :80 |
-p PID |
查看指定PID打开的文件 | lsof -p 1234 |
-u 用户名 |
查看指定用户打开的文件 | lsof -u root |
-c 进程名 |
查看指定名称的进程打开的文件 | lsof -c nginx |
示例:
lsof -i :8080 # 查看8080端口被哪个进程占用
使用systemctl管理系统服务进程
对于systemd管理的系统(如Ubuntu 16+、CentOS 7+),服务进程可通过systemctl查看。
常用命令
systemctl status 服务名:查看服务状态(如systemctl status nginx)systemctl list-units --type=service:列出所有服务systemctl show 服务名 --property=MainPID:获取服务的主进程PID
示例:
systemctl status nginx | grep MainPID # 输出nginx的主进程PID
综合应用场景
- 排查高CPU占用进程:
top -p $(pgrep -f "异常进程名") # 实时监控异常进程
- 查找僵尸进程:
ps -ef | grep Z | grep -v grep # 查找状态为Z的僵尸进程
- 批量终止用户进程:
pkill -u testuser # 终止testuser的所有进程
相关问答FAQs
Q1:如何查找占用端口8080的进程并强制终止?
A:首先使用lsof -i :8080查看占用端口的进程PID,然后通过kill -9 PID强制终止。
lsof -i :8080 | awk '{print $2}' | grep -v PID | xargs kill -9 # 查找并强制终止8080端口进程
Q2:为什么ps -ef看到的进程状态是“Z”(僵尸进程),如何处理?
A:僵尸进程是已终止但父进程未读取其退出状态的进程,通常父进程正常退出后会自动回收,若僵尸进程过多,可能是父进程异常,可通过kill -9 父进程PID强制终止父进程,使僵尸进程被init进程接管并回收。
ps -ef | grep Z | grep -v grep | awk '{print $3}' | xargs kill -9 # 终止僵尸进程的父进程
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/28154.html