当前位置: 首页 > news >正文

PS 例程大全

PS 例程大全

📚 PS 基础语法

ps [options]

🔧 常用选项组合

组合说明输出内容
ps auxBSD风格,最常用所有用户的所有进程
ps -efUNIX/标准风格完整格式列表
ps -eF扩展完整格式更多细节
ps -ely长格式详细技术信息
ps -ejH显示进程树层次结构
ps -eLf显示线程LWP(轻量级进程)

📊 输出格式控制

1.自定义列(-o)

# 自定义显示列 ps -eo pid,ppid,cmd,%cpu,%mem,user,tty,start,time ps -eo pid,comm,args,pcpu,pmem,etime,euid,ruid # 按指定顺序 ps -o pid,user,comm,cpu,mem -e # 显示完整命令 ps -eo pid,user,cmd # 常用列说明: # pid: 进程ID # ppid: 父进程ID # user: 用户名 # comm: 命令名 # cmd: 完整命令 # args: 参数 # %cpu: CPU使用率 # %mem: 内存使用率 # time: 累计CPU时间 # etime: 进程运行时间 # vsz: 虚拟内存大小(KB) # rss: 物理内存大小(KB) # tty: 控制终端 # stat: 进程状态 # start: 启动时间 # nice: 优先级 # c: CPU利用率 # sz: 内存页大小 # wchan: 等待通道

2.排序输出

# 按CPU使用率排序(降序) ps aux --sort=-%cpu # 按内存使用率排序(降序) ps aux --sort=-%mem # 按启动时间排序 ps aux --sort=start # 按进程ID排序 ps aux --sort=pid # 多级排序 ps aux --sort=-%cpu,%mem

🎯 进程选择

1.按用户筛选

# 显示指定用户的进程 ps -u root ps -U www-data ps -u $(whoami) # 当前用户 ps aux | grep "^username" # 过滤用户(注意^) # 显示所有用户进程 ps aux ps -eF

2.按进程ID筛选

# 显示指定PID ps -p 1234 ps -p 1234,5678 # 显示父进程的所有子进程 ps --ppid 1234 # 显示会话ID的进程 ps -s 4567

3.按终端筛选

# 显示特定终端的进程 ps -t pts/0 ps -t tty1 # 显示有终端的进程 ps -a ps -at # 显示所有进程(包括无终端) ps aux

4.按命令名筛选

# 显示指定命令的进程 ps -C bash ps -C nginx,apache2 ps -C "python3" -o pid,cmd,user

📈 进程状态详解

1.STAT 状态码

代码含义
R运行中或可运行
S可中断的睡眠
D不可中断的睡眠(通常IO)
Z僵尸进程
T停止状态
t跟踪/调试中停止
X死亡(不应该看到)
<高优先级
N低优先级
L有页面被锁定在内存
s会话领导者
l多线程
+前台进程组

2.状态查看示例

# 查看进程状态 ps -eo pid,stat,cmd # 查找僵尸进程 ps aux | grep 'Z' ps -eo pid,stat,cmd | grep '^.* Z' # 查找停止的进程 ps -eo pid,stat,cmd | grep 'T' # 查看进程优先级 ps -eo pid,nice,cmd

🛠️ 实用例程

1.系统监控

# 查看CPU使用率最高的进程 ps aux --sort=-%cpu | head -10 # 查看内存使用率最高的进程 ps aux --sort=-%mem | head -10 # 查看总进程数 ps aux | wc -l ps -e --no-headers | wc -l # 查看每个用户的进程数 ps -eo user | sort | uniq -c | sort -nr

2.服务管理

# 查找服务进程 ps aux | grep nginx ps -C nginx -o pid,cmd,user,%cpu,%mem # 查找Java进程 ps aux | grep java ps -C java -o pid,user,cmd,pcpu,pmem # 查找Docker容器进程 ps aux | grep docker # 查找特定端口的进程 ps aux | grep :80

3.进程树查看

# 显示进程树 pstree pstree -p # 显示PID pstree -u # 显示用户名 pstree -a # 显示命令行参数 # 用ps显示层次结构 ps -ejH ps axjf # 显示森林 ps -eo pid,ppid,cmd --forest # 树形结构 # 查看特定进程的树 ps -eo pid,ppid,cmd --forest | grep -A 5 "nginx"

4.资源分析

# 查看进程内存使用详情 ps -eo pid,user,cmd,%mem,rss,vsz,size --sort=-rss | head -20 # 查看进程打开文件数(需要lsof) ps aux | grep process_name lsof -p PID | wc -l # 查看进程启动时间 ps -eo pid,user,cmd,start,etime # 查看进程运行时间 ps -eo pid,cmd,etime | grep python

🔍 高级诊断

1.线程查看

# 显示线程(LWP) ps -eLf ps -T -p PID # 特定进程的线程 ps -L -p PID -o pid,tid,pcpu,cmd # 线程详细信息 ps -eo pid,lwp,cmd,nlwp,%cpu,%mem | head -20 # 查找多线程进程 ps -eo pid,cmd,nlwp | sort -k3 -nr | head -10

2.安全相关

# 查看进程的真实和有效用户 ps -eo pid,user,euser,ruser,cmd # 查看进程的真实和有效组 ps -eo pid,group,egroup,rgroup,cmd # 查看SUID/SGID程序 ps -eo pid,user,group,cmd | grep -E "root|setuid" # 查看网络相关进程 ps -eo pid,user,cmd | grep -E "(ssh|telnet|ftp)"

3.性能分析

# 查看进程的CPU亲和性 ps -eo pid,cmd,psr # psr = 处理器编号 # 查看进程调度策略 ps -eo pid,cmd,policy # policy: TS=分时, FF=FIFO, RR=轮询 # 查看进程等待的通道 ps -eo pid,cmd,wchan # 查看进程的信号掩码 ps -eo pid,cmd,blocked,caught,ignored,pending

📋 实用单行命令

1.系统管理

# 杀死僵尸进程 ps aux | awk '$8=="Z" {print $2}' | xargs kill -9 # 清理无用的进程 ps aux | grep defunct | awk '{print $2}' | xargs kill -9 # 查找并杀死特定用户的所有进程 ps -u username -o pid= | xargs kill -9 # 监控进程变化 watch -n 1 'ps aux --sort=-%cpu | head -10'

2.开发调试

# 查看Python进程 ps aux | grep python | grep -v grep # 查看进程环境变量 ps eww -p PID # 显示环境变量 cat /proc/PID/environ | tr '\0' '\n' # 查看进程打开的文件 lsof -p PID ls -la /proc/PID/fd/ # 查看进程内存映射 pmap PID cat /proc/PID/maps

3.容器相关

# 查看容器进程 ps aux | grep -E "docker|containerd|runc" # 查看容器内进程 docker exec container_name ps aux # 查看Kubernetes Pod进程 ps aux | grep -E "kubelet|kube-proxy" # 查看容器资源使用 docker stats

🎪 组合工具

1.与 grep 组合

# 常用模式:排除grep自身 ps aux | grep [n]ginx # 技巧:[]使grep不匹配自身 ps aux | grep nginx | grep -v grep # 传统方法 # 精确匹配进程名 ps aux | grep "^root.*bash" # 查找多个进程 ps aux | grep -E "(nginx|apache|mysql)" # 查找监听端口的进程 ps aux | grep -E ":[0-9]+"

2.与 awk 组合

# 提取特定列 ps aux | awk '{print $1, $2, $11}' # 统计资源使用 ps aux | awk '{cpu+=$3; mem+=$4} END {print "CPU:", cpu, "MEM:", mem}' # 按用户统计 ps aux | awk '{users[$1]++} END {for (u in users) print u, users[u]}' # 过滤特定条件 ps aux | awk '$3 > 10.0 {print $0}' # CPU使用>10% ps aux | awk '$4 > 1.0 {print $0}' # 内存使用>1%

3.与 sort 组合

# 多级排序 ps aux | sort -k3,3nr -k4,4nr # 先CPU后内存降序 # 按用户分组排序 ps aux | sort -k1,1 -k3,3nr # 按启动时间排序 ps aux | sort -k9,9

4.与其他命令组合

# 查看进程的完整路径 ps aux | grep process | awk '{print $2}' | xargs ls -l /proc/{}/exe # 查看进程的cgroup信息 ps aux | grep docker | awk '{print $2}' | xargs -I{} cat /proc/{}/cgroup # 查看进程的网络连接 ps aux | grep nginx | awk '{print $2}' | xargs -I{} lsof -p {}

📊 输出格式化

1.人类可读格式

# 内存显示为MB/GB ps aux --sort=-%mem | head -10 | awk '{printf "%-10s %-10s %-8s %-8s %-8s %-12s %s\n", $1, $2, $3, $4, $5/1024"M", $6/1024"M", $11}' # 时间格式化 ps -eo pid,user,cmd,etime --sort=etime | head -10 # 创建自定义报告 ps -eo pid,user,pcpu,pmem,vsz,rss,tty,stat,start,time,cmd --sort=-pcpu | head -20

2.JSON/XML 输出

# JSON输出(需要新版ps或jq) ps -eo pid,user,cmd --format=json | jq . # CSV输出 ps -eo pid,user,pcpu,pmem,cmd --no-headers --format=csv # 自定义分隔符 ps -eo pid,user,cmd --no-headers -o pid,user,cmd --separator='|'

🔧 系统诊断脚本

1.进程监控脚本

#!/bin/bash # monitor_process.sh INTERVAL=2 COUNT=10 echo "监控进程资源使用情况" echo "=====================" for ((i=1; i<=COUNT; i++)) do echo -e "\n轮次 $i - $(date '+%H:%M:%S')" echo "CPU前5:" ps aux --sort=-%cpu | head -6 echo -e "\n内存前5:" ps aux --sort=-%mem | head -6 sleep $INTERVAL done

2.进程分析脚本

#!/bin/bash # analyze_process.sh PID=$1 if [ -z "$PID" ]; then echo "用法: $0 <PID>" exit 1 fi if [ ! -d "/proc/$PID" ]; then echo "进程 $PID 不存在" exit 1 fi echo "=== 进程 $PID 分析报告 ===" echo "1. 基本信息:" ps -p $PID -o pid,ppid,user,group,cmd,start,etime echo -e "\n2. 资源使用:" ps -p $PID -o pcpu,pmem,vsz,rss,time echo -e "\n3. 状态信息:" cat /proc/$PID/status | grep -E "State|Vm|Threads" echo -e "\n4. 打开文件数:" ls -l /proc/$PID/fd 2>/dev/null | wc -l echo -e "\n5. 内存映射:" pmap $PID | tail -1

3.僵尸进程清理脚本

#!/bin/bash # clean_zombies.sh echo "查找僵尸进程..." ZOMBIES=$(ps aux | awk '$8=="Z" {print $2}' | tr '\n' ' ') if [ -z "$ZOMBIES" ]; then echo "没有找到僵尸进程" exit 0 fi echo "找到僵尸进程: $ZOMBIES" echo "尝试清理..." for PID in $ZOMBIES; do PARENT=$(ps -o ppid= -p $PID) echo "僵尸进程 $PID (父进程 $PARENT)" # 尝试杀死父进程 if [ ! -z "$PARENT" ]; then echo " 发送SIGCHLD给父进程 $PARENT" kill -s SIGCHLD $PARENT 2>/dev/null # 检查是否清理成功 sleep 1 if ps -p $PID > /dev/null 2>&1; then echo " ❌ 进程 $PID 仍然存在" else echo " ✅ 进程 $PID 已清理" fi fi done echo "清理完成"

⚠️ 注意事项

1.权限问题

# 普通用户只能看到自己的进程 ps -u $USER # root可以看到所有进程 sudo ps aux # 查看其他用户的进程需要权限 sudo ps -u otheruser

2.性能考虑

# 避免频繁执行ps aux(消耗资源) # 使用top/htop实时监控更好 # 对于大量进程,指定列提高性能 ps -eo pid,cmd,pcpu # 使用/proc文件系统获取信息更快 cat /proc/1234/status

3.兼容性问题

# Linux vs BSD选项差异 ps aux # Linux/BSD通用 ps -ef # UNIX标准 ps -eF # 扩展格式 # 不同系统的输出可能不同 uname -a # 先查看系统信息

📖 速查表

常用列说明

列名说明示例命令
pid进程IDps -eo pid,cmd
ppid父进程IDps -eo pid,ppid,cmd
user用户名ps -eo user,pid,cmd
group组名ps -eo group,pid,cmd
%cpuCPU使用率ps -eo pid,cmd,%cpu
%mem内存使用率ps -eo pid,cmd,%mem
vsz虚拟内存大小(KB)ps -eo pid,cmd,vsz
rss物理内存大小(KB)ps -eo pid,cmd,rss
tty控制终端ps -eo pid,cmd,tty
stat进程状态ps -eo pid,cmd,stat
start启动时间ps -eo pid,cmd,start
time累计CPU时间ps -eo pid,cmd,time
etime运行时间ps -eo pid,cmd,etime
cmd完整命令ps -eo pid,cmd
comm命令名ps -eo pid,comm
args命令参数ps -eo pid,args
nice优先级ps -eo pid,cmd,nice
pri调度优先级ps -eo pid,cmd,pri
psr处理器编号ps -eo pid,cmd,psr

状态码速查

状态含义常见场景
R运行/可运行正在执行或等待CPU
S可中断睡眠等待事件完成
D不可中断睡眠磁盘IO,不可被信号中断
Z僵尸进程已结束但父进程未回收
T停止被作业控制信号停止
t跟踪停止被调试器暂停
X死亡进程完全终止
<高优先级优先级<0
N低优先级优先级>0
L页面锁定内存页被锁定
s会话领导者进程是会话首进程
l多线程进程是多线程的
+前台进程在终端前台运行

这个大全涵盖了 ps 命令的绝大多数用法,从基础查询到高级诊断都有示例。掌握这些例程,你就能高效地管理和监控系统进程!

http://www.jsqmd.com/news/88371/

相关文章:

  • wangEditor导入excel数据到html富文本编辑
  • 如何利用JSP实现信创环境的大文件上传?
  • 实习面试题-Kotlin 面试题
  • CF1619G Unusual Minesweeper 解题报告
  • 毕设 stm32 RFID员工打卡门禁系统(源码+硬件+论文)
  • 基于vue的个人博客论坛交流网站_sdj10346_springboot php python nodejs
  • 光伏电池simulink仿真模型 光伏电池建模仿真 包括改变温度 改变辐照度的特性分析 模型可...
  • JSP中如何利用分块技术实现百万文件上传优化?
  • 多交换机VLAN的划分,配置trunk中继链路,链路聚合配置, 利用路由器连接网络,配置静态路由
  • JSP中如何集成SM4加密实现大文件上传存储安全?
  • 如何使用yolov11训练使用—番茄炭疽病与品质检测数据集 炭疽病症状识别、病害区域检测、成熟果实与腐烂果实区分 目标检测 4类 可直接用于模型训练 YOLO适用的txt格式
  • 四旋翼无人机PID控制仿真模型探索
  • wangEditor粘贴ppt母版样式自动适配网页
  • Vim 分屏操作详解
  • 63、技术综合指南:系统配置、数据库管理与网络应用
  • JAVA中如何利用JSP实现视频文件的分片上传?
  • MATLAB/Simulink仿真下的蓄电池储能及双向斩波充放电控制策略
  • 列出自己网站音频书籍资源方法附php代码
  • 48、PHP与C/C++编程实用指南
  • 隐式转换,强制转换,字符串,字符的加操作
  • .NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
  • Android中Compose系列之按钮Button
  • SPSS——判别分析——“一般判别分析”
  • 49、Ubuntu 编程工具与 Mono 开发全解析
  • wangEditor支持pdf书签目录结构导入功能
  • Agent 结构(LLM + Tool + Executor)
  • 50、Mono应用开发与Linux机器安全防护
  • 嗨! Coze 的 AI 漫游:解锁智能体与工作流,轻松拿捏智能应用(1) - 实践
  • 红米10x将一键清理和锁屏加到桌面步骤
  • SPSS——非参数检验-“卡方检验”