ps

title

ps(Process Status)命令用于显示当前系统中运行的进程信息,是Linux系统监控和管理进程的基本工具。

基本语法

ps [选项]

主要选项

BSD风格选项(不带前缀-)

  • a - 显示所有终端的进程
  • u - 显示进程的详细信息
  • x - 显示无终端的进程
  • r - 只显示正在运行的进程
  • T - 显示当前终端的进程

UNIX风格选项(带前缀-)

  • -e - 显示所有进程
  • -f - 显示完整的进程信息
  • -l - 长格式显示
  • -o format - 自定义输出格式
  • -p pid - 显示指定PID的进程
  • -u user - 显示指定用户的进程
  • -C command - 显示指定命令的进程

GNU风格选项(带前缀--)

  • --forest - 以树形格式显示进程
  • --sort column - 按指定列排序
  • --no-headers - 不显示标题行

常用组合

最常用的命令组合

# 显示所有进程的详细信息
ps aux

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

# 以完整格式显示所有进程
ps -ef

# 显示进程层次结构
ps -ejH

输出字段含义

ps aux输出字段

  • USER - 进程所有者
  • PID - 进程ID
  • %CPU - CPU使用百分比
  • %MEM - 内存使用百分比
  • VSZ - 虚拟内存大小(KB)
  • RSS - 物理内存大小(KB)
  • TTY - 终端类型
  • STAT - 进程状态
  • START - 进程启动时间
  • TIME - CPU使用时间
  • COMMAND - 命令行

进程状态代码(STAT)

  • R - 运行中(Running)
  • S - 睡眠中(Sleeping)
  • D - 不可中断睡眠(Uninterruptible sleep)
  • T - 停止(Stopped)
  • Z - 僵尸进程(Zombie)
  • < - 高优先级
  • N - 低优先级
  • L - 有页面锁定在内存中
  • s - 会话领导者
  • l - 多线程
  • + - 前台进程组

使用示例

基本查看

# 显示当前用户的进程
ps

# 显示所有进程
ps aux

# 显示完整命令行
ps auxww

# 以树形格式显示
ps auxf

查找特定进程

# 按进程名查找
ps aux | grep nginx
ps -C nginx

# 按用户查找
ps -u root
ps aux | grep "^root"

# 按PID查找
ps -p 1234
ps aux | grep 1234

自定义输出格式

# 只显示PID和命令
ps -eo pid,comm

# 显示进程的CPU和内存使用情况
ps -eo pid,ppid,cmd,%cpu,%mem

# 显示进程的完整信息
ps -eo pid,ppid,user,cmd,state,pri,nice,pcpu,pmem,time

# 显示线程信息
ps -eLf
ps auxm

排序和过滤

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

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

# 按启动时间排序
ps aux --sort=start_time

# 组合排序(先按CPU,再按内存)
ps aux --sort=-%cpu,-%mem

实际应用场景

系统监控

# 查看系统负载最高的进程
ps aux --sort=-%cpu | head -10

# 查看内存使用最多的进程
ps aux --sort=-%mem | head -10

# 查看运行时间最长的进程
ps -eo pid,cmd,etime --sort=etime | tail -10

# 统计进程状态
ps aux | awk '{print $8}' | sort | uniq -c

进程管理

# 查看指定服务的所有进程
ps aux | grep -E "(apache|httpd|nginx)"

# 查看父子进程关系
ps -ejH
ps auxf | grep -A5 -B5 进程名

# 查看进程的线程
ps -T -p 1234
ps auxm | grep 进程名

故障排查

# 查找僵尸进程
ps aux | grep -E "Z|<defunct>"

# 查找CPU使用率高的进程
ps aux | awk '$3 > 50 {print $0}'

# 查找内存使用率高的进程
ps aux | awk '$4 > 10 {print $0}'

# 查看进程的详细启动信息
ps -fp $(pgrep 进程名)

服务检查

# 检查Web服务器进程
ps aux | grep -E "(apache|httpd|nginx)" | grep -v grep

# 检查数据库进程
ps aux | grep -E "(mysql|postgresql|mongodb)" | grep -v grep

# 检查SSH服务
ps aux | grep sshd | grep -v grep

# 检查系统关键进程
ps -ef | grep -E "(systemd|init|kernel)"

高级用法

进程监控脚本

#!/bin/bash
# process_monitor.sh

echo "=== TOP CPU PROCESSES ==="
ps aux --sort=-%cpu | head -6

echo -e "\n=== TOP MEMORY PROCESSES ==="
ps aux --sort=-%mem | head -6

echo -e "\n=== PROCESS COUNT BY USER ==="
ps aux | awk '{print $1}' | sort | uniq -c | sort -nr

echo -e "\n=== PROCESS STATES ==="
ps aux | awk '{print $8}' | sort | uniq -c

实时进程监控

# 每5秒刷新一次进程信息
watch -n 5 'ps aux --sort=-%cpu | head -20'

# 监控特定进程的资源使用
watch -n 2 'ps -p 1234 -o pid,ppid,cmd,%cpu,%mem,time'

# 监控进程数量变化
watch -n 1 'ps aux | wc -l'

进程分析

# 统计各用户的进程数
ps aux | awk '{print $1}' | sort | uniq -c | sort -nr

# 统计不同状态的进程数
ps aux | awk '{print $8}' | sort | uniq -c

# 查看进程的命令行参数
ps -ww -p PID

# 计算系统总的CPU和内存使用
ps aux | awk '{cpu+=$3; mem+=$4} END {print "Total CPU:", cpu"%", "Total MEM:", mem"%"}'

与其他命令结合

结合kill命令

# 杀死特定名称的所有进程
ps aux | grep process_name | grep -v grep | awk '{print $2}' | xargs kill

# 更简单的方法
pkill process_name
killall process_name

结合管道和过滤

# 查找占用CPU超过50%的进程并显示详细信息
ps aux | awk '$3 > 50' | sort -k3 -nr

# 查看所有Java进程的内存使用情况
ps aux | grep java | awk '{print $2, $4, $11}' | sort -k2 -nr

# 统计apache进程的内存总使用量
ps aux | grep apache | awk '{sum+=$4} END {print "Apache total memory:", sum"%"}'

性能考虑

减少系统开销

# 对于频繁执行的脚本,使用-o选项只获取需要的字段
ps -eo pid,cmd --no-headers

# 避免使用grep过滤ps输出,使用ps的内置过滤
ps -C process_name  # 而不是 ps aux | grep process_name

大系统优化

# 在进程很多的系统中,限制输出行数
ps aux | head -100

# 使用pgrep代替ps+grep组合
pgrep -l process_name  # 而不是 ps aux | grep process_name

注意事项

  1. 权限: 普通用户只能看到自己的进程,root可以看到所有进程
  2. 瞬时快照: ps显示的是执行时刻的进程状态
  3. 格式差异: 不同Unix系统的ps选项可能不同
  4. 性能影响: 频繁执行ps命令会消耗系统资源
  5. 命令行截断: 长命令行可能被截断,使用-ww选项显示完整命令

相关命令

  • top - 动态显示进程信息
  • htop - 交互式进程查看器
  • pstree - 以树形格式显示进程
  • pgrep - 按名称查找进程ID
  • pkill - 按名称杀死进程
  • jobs - 显示当前shell的作业

ps命令是Linux系统进程管理的核心工具,掌握其用法对系统监控和故障排查非常重要。


powered by Gitbook© 2025 编外计划 | 最后修改: 2025-07-28 12:47:16

results matching ""

    No results matching ""