在Linux系统中,进程是程序执行的基本单位,系统通过管理进程来实现多任务并发处理,无论是排查系统故障、监控资源使用,还是终止异常进程,查询进程都是运维和开发人员的必备技能,Linux提供了多种命令和工具来查询进程,每种工具都有其特点和适用场景,本文将详细介绍这些方法及其使用技巧。
基础进程查询命令:ps
ps
(process status)是最常用、最基础的进程查看命令,它可以静态地显示当前进程的快照,适合快速获取特定进程的信息。
基本语法
ps [选项]
常用选项及示例
-
ps aux
:显示所有进程的详细信息,包括用户、CPU占用率、内存占用率等。
输出列说明:USER
:进程所有者PID
:进程ID%CPU
:CPU占用率%MEM
:内存占用率VSZ
:虚拟内存大小(KB)RSS
:常驻集大小(物理内存占用,KB)TTY
:终端类型STAT
:进程状态(如S=休眠,R=运行,Z=僵死)START
:启动时间TIME
:累计CPU时间COMMAND
:启动命令
示例:
ps aux | grep nginx
此命令可筛选出所有与nginx相关的进程,常用于检查服务是否运行。
-
ps -ef
:以全格式显示所有进程,包含父进程ID(PPID),适合查看进程的父子关系。
输出列说明:UID
:用户IDPID
:进程IDPPID
:父进程IDC
:CPU调度器优先级STIME
:启动时间TTY
:终端TIME
:累计CPU时间CMD
:启动命令
示例:
ps -ef | grep "sshd"
可查看SSH服务的进程及其父进程(通常为init/systemd)。
动态进程监控:top与htop
ps
只能查看静态快照,若需实时监控进程状态(如CPU/内存动态变化),需使用top
或其增强版htop
。
top命令
top
以全屏交互方式动态显示进程,默认按CPU占用率排序,每3秒刷新一次。
-
基本语法:
top [选项]
-
常用选项:
-d 秒数
:设置刷新间隔(如top -d 2
每2秒刷新)。-p PID
:监控指定进程(如top -p 1234
)。
-
交互操作:
M
:按内存占用率排序P
:按CPU占用率排序(默认)k
:终止指定进程(需输入PID)q
:退出top
-
输出说明:
顶部为系统整体信息(运行时间、任务数、CPU/内存使用率),下方为进程列表。
htop命令
htop
是top
的增强版,提供更直观的界面(如颜色区分、进程树、鼠标操作),需单独安装(apt install htop
/yum install htop
)。
-
特点:
- 支持垂直/水平分屏查看多个进程
- 通过F2键打开设置菜单,自定义显示列
- F9键快速终止进程,支持信号选择(如SIGKILL、SIGTERM)
- 按
F3
搜索进程,F4
过滤进程
-
示例:
htop --sort-cpu # 按CPU占用率排序启动
按条件筛选进程:pgrep与pidof
若需通过进程名、用户、端口等条件快速获取进程ID(PID),pgrep
和pidof
更高效。
pgrep
pgrep
根据进程属性匹配进程,返回符合条件的PID。
-
基本语法:
pgrep [选项] 进程名
-
常用选项:
-f
:匹配完整命令行(如pgrep -f "nginx -c"
)-u 用户名
:匹配指定用户的进程(如pgrep -u root
)-l
:显示进程名而不仅是PID(如pgrep -l nginx
)
-
示例:
pgrep -f "mysqld" # 查找MySQL服务进程的PID
pidof
pidof
仅通过进程名查找PID,适合简单场景。
- 示例:
pidof nginx # 返回nginx主进程的PID
查看进程树:pstree
进程树可直观展示进程间的父子关系,帮助理解服务依赖结构。
-
基本语法:
pstree [选项]
-
常用选项:
-p
:显示进程PID(如pstree -p | grep systemd
)-h
:高亮当前进程-u
:显示用户名
-
示例:
pstree -p # 以树状图显示所有进程及其PID
查看进程打开的文件:lsof
lsof
(list open files)可查看进程打开的文件、网络连接等,常用于排查端口占用或文件锁定问题。
-
基本语法:
lsof [选项] [文件/目录/端口]
-
常用选项:
-i 端口
:查看占用指定端口的进程(如lsof -i :80
)-p PID
:查看指定进程打开的文件(如lsof -p 1234
)-u 用户名
:查看指定用户的进程打开的文件(如lsof -u mysql
)
-
示例:
lsof -i :3306 # 查看MySQL默认端口3306的占用情况 lsof /var/log/nginx/access.log # 查看访问日志文件被哪些进程打开
查看系统服务进程:systemctl
对于systemd管理的系统服务,systemctl
可查看服务状态及其关联进程。
- 基本语法:
systemctl status 服务名.service
- 示例:
systemctl status sshd.service # 查看SSH服务状态及进程信息
输出中包含
Main PID
(主进程ID)和CGroup
(进程资源限制路径)。
常用进程查询命令对比
命令 | 功能描述 | 常用选项 | 典型场景 |
---|---|---|---|
ps | 静态查看进程快照 | aux, -ef, –sort | 快速获取特定进程信息 |
top | 动态监控进程资源 | -d, -p, 交互式操作(M/P/k) | 实时观察CPU/内存占用高的进程 |
htop | 增强版动态监控 | –sort-cpu, –sort-mem, F2/F3/F9 | 交互式进程管理与分析 |
pgrep | 按条件筛选进程PID | -f, -u, -l | 脚本中快速获取进程ID |
pstree | 查看进程树结构 | -p, -h, -u | 分析进程依赖关系 |
lsof | 查看进程打开的文件 | -i, -p, -u | 排查端口占用、文件锁定问题 |
systemctl | 查看系统服务进程 | status, list-units | 管理systemd服务状态 |
相关问答FAQs
Q1: 如何快速找到并终止占用CPU最高的进程?
A: 可通过以下步骤操作:
- 使用
top
或htop
按CPU占用率排序:top -o %CPU # top命令按CPU排序 # 或 htop --sort-cpu # htop按CPU排序
- 记录占用率最高的进程PID(通常位于列表顶部)。
- 使用
kill
命令终止进程:kill -9 PID # -9表示强制终止(SIGKILL信号),适用于普通kill无效的僵死进程 # 或 kill PID # 默认SIGTERM信号,允许进程清理资源后退出
也可直接在
htop
中使用F9
键终止进程。
Q2: 如何查看某个进程的详细信息和子进程?
A: 可结合ps
、pstree
和ls -l /proc/PID
查看:
- 通过
pgrep
或ps
获取进程PID:pgrep -f 进程名 # pgrep -f "java"
- 查看进程详细信息(包括环境变量、文件描述符等):
ls -l /proc/PID # ls -l /proc/1234
其中
/proc/PID/environ
为进程环境变量,/proc/PID/fd
为打开的文件描述符。 - 查看进程的子进程:
ps -ef --ppid PID # ps -ef --ppid 1234,显示PID为1234的子进程 pstree -p PID # pstree -p 1234,以树状图显示子进程关系
对于多线程进程,可通过
ps -eLf -p PID
查看线程信息。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23979.html