news 2026/4/18 12:48:12

PS 例程大全

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 命令的绝大多数用法,从基础查询到高级诊断都有示例。掌握这些例程,你就能高效地管理和监控系统进程!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 6:23:45

基于vue的健身房管理系统_tgk4bbwq_springboot php python nodejs

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring…

作者头像 李华
网站建设 2026/4/18 5:23:08

HTTP协议在JSP大附件上传中如何优化性能?

大文件上传系统开发指南&#xff08;基于原生JSSpringBoot&#xff09; 老铁&#xff0c;先别慌&#xff01;让我帮你捋一捋这个"毕业设计找工作"双重大礼包 兄弟&#xff0c;看到你的需求我仿佛看到了当年被毕业设计支配的恐惧。不过别担心&#xff0c;我这个&quo…

作者头像 李华
网站建设 2026/4/18 8:50:54

JAVA中如何利用JSP实现视频文件的分片上传?

企业级大文件安全传输解决方案 作为广东IT行业软件公司的项目负责人&#xff0c;针对贵司的大文件传输需求&#xff0c;我提供以下专业解决方案。本方案完全满足高稳定性、高安全性要求&#xff0c;支持100G级别文件传输&#xff0c;并具备完善的信创国产化适配能力。 核心功…

作者头像 李华
网站建设 2026/4/18 5:23:07

JSP中如何利用分段技术实现超大附件上传?

大文件上传系统开发指南&#xff08;兼容IE8的WebUploader实现&#xff09; 项目概述 大家好&#xff0c;我是广东的一名.NET程序员&#xff0c;最近接了一个让人头大的外包项目。客户要求实现一个支持20G大文件上传的系统&#xff0c;还要兼容IE8这种古董浏览器&#xff0c;…

作者头像 李华
网站建设 2026/4/18 10:50:33

JSP如何支持多平台兼容的大文件分片上传?

大文件上传下载系统开发指南 项目概述 老哥&#xff0c;你这个需求可真是够硬核的&#xff01;20G文件上传、文件夹层级保留、断点续传、加密传输存储&#xff0c;还要兼容IE8&#xff0c;预算才100块…这活儿不简单啊&#xff01;不过既然你找到我了&#xff0c;咱们就一起啃…

作者头像 李华
网站建设 2026/4/17 16:44:27

Qt面试题合集(二)

Qt面试合集二 3.信号发出后槽函数会立即执行吗&#xff1f; 这是由信号槽的连接方式(Connection Type)和线程归属决定的。 1. 核心概念&#xff1a;Qt 的 4 种连接方式 Qt 通过QObject::connect()函数建立信号槽连接时&#xff0c;可指定第 5 个参数&#xff08;连接类型&#…

作者头像 李华