linux ps(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观


前言

在Linux系统的世界中,进程管理如同为一台精密的机器进行定期维护。而ps命令正是这台机器的“体检师”,它能快速诊断系统中进程的运行状态。无论是初学者还是中级开发者,掌握ps命令不仅能提升日常开发效率,更能为系统排错和性能优化打下坚实基础。本文将从基础语法到实战案例,结合形象比喻与代码示例,带您全面理解这一核心工具。


一、基础用法:像读体检报告一样解读进程信息

1.1 简单查看当前进程

ps命令最基础的形式是直接执行:

ps  

输出结果会列出当前终端的进程信息,类似查看一份简化的“生命体征报告”。例如:

  PID TTY          TIME CMD  
 1234 pts/0    00:00:01 bash  
 5678 pts/0    00:00:00 ps  
  • PID:进程的“身份证号码”,唯一标识每个进程。
  • CMD:进程的“姓名”,如bash是交互式终端,ps是当前命令本身。

1.2 查看所有进程:突破终端限制

默认ps仅显示当前终端的进程,使用-A-e参数可查看系统中所有进程:

ps -A  

这相当于从“个人体检报告”升级为“全系统扫描”,输出量会显著增加。


二、核心参数详解:参数组合的“瑞士军刀”

2.1 进程过滤参数

参数-a-x的组合艺术

  • -a:显示所有终端的进程,如同“打开所有房间的门”。
  • -x:显示无终端的进程,相当于“检查地下室的隐蔽区域”。
    结合使用:
ps -ax  

此时输出将包含图形界面进程或后台服务,例如systemdnginx等。

参数-u聚焦用户进程

想查看特定用户的进程?用-u参数指定用户名:

ps -u username  

这就像“筛选体检报告中的某位患者”,快速定位目标进程。

2.2 信息展示参数

ps aux:最常用的“全景模式”

ps aux  
  • a:显示所有用户进程
  • u:展示进程所属用户
  • x:包含无终端进程

输出列含义(以典型输出为例):

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
root         1  0.0  0.1  19572  1024 ?        Ss   Nov01   0:01 systemd  
  • %CPU/%MEM:进程的“消耗指标”,类似体检报告中的血压值。
  • VSZ/RSS:虚拟/物理内存占用,比喻为“占用的房间大小”与“实际使用的家具空间”。

ps -ef:另一种“全息视角”

ps -ef  

输出列与ps aux类似,但格式稍有差异,适合需要精确字段对齐的场景。


三、进阶技巧:组合命令的“变形金刚”

3.1 结合grep精准定位

想要快速找到某个进程?用grep进行文本过滤:

ps aux | grep "nginx"  

这相当于“用放大镜搜索体检报告中的关键词”。若需排除自身grep进程,可添加--exclude

ps aux | grep "[n]ginx"  

3.2 按资源使用率排序

通过--sort参数,可按CPU或内存消耗排序:

ps aux --sort=-%cpu  

-%cpu表示降序排列,类似“按身高从高到低排列人群”。

3.3 结合管道输出到文件

长期监控时,可将结果保存为文件:

ps -ef > process_list.txt  

这如同“将体检报告存档备查”,方便后续分析。


四、实战案例:解决真实场景问题

4.1 排查高CPU占用进程

当系统卡顿时,用以下命令快速定位“消耗大户”:

ps aux --sort=-%cpu | head -n 6  

输出结果中,前几名的进程可能是问题源头。例如:

nginx     1234 98.3  0.5  12345  6789 ?      Rl   10:00   2:34 nginx: worker process  

此时可结合top命令进一步观察动态变化。

4.2 统计用户进程数量

想知道某用户启动了多少进程?用awk进行计数:

ps -u username | wc -l  

输出数字即为进程总数,类似“统计某班级的学生人数”。

4.3 监控特定服务状态

定期检查服务进程是否存在,可用以下脚本片段:

if ! pgrep -x "my_service" > /dev/null; then  
    echo "服务已停止,触发告警!"  
fi  

pgrepps的“快捷版”,直接通过进程名查找PID。


五、与其他命令的协同:构建系统监控生态

5.1 ps vs top:静态与动态的对比

  • ps:像“抓拍照片”,记录某个时间点的进程状态。
  • top:像“实时监控视频”,持续刷新进程变化。

5.2 结合kill终止进程

通过ps找到PID后,可用kill命令终止进程:

kill $(ps aux | grep "bad_process" | awk '{print $2}')  

此命令组合相当于“根据体检报告中的异常指标,开具治疗方案”。


六、常见误区与最佳实践

6.1 参数误用导致的信息缺失

  • 误区:仅使用ps不带参数,忽略后台进程。
  • 解决方案:养成使用ps auxps -ef的习惯,确保覆盖所有场景。

6.2 输出列的误解

  • VSZ与RSS的关系
    • VSZ是虚拟内存,包含物理内存+交换分区。
    • RSS是实际使用的物理内存,更贴近真实消耗。

6.3 安全操作建议

  • 避免随意终止进程:对PID 1(通常是systemd)的kill操作会导致系统崩溃。

结论

通过本文,我们系统梳理了ps命令从基础到高级的使用场景,并通过实际案例展示了其在开发与运维中的价值。无论是调试代码时的进程追踪,还是服务器监控中的资源分析,ps都是Linux开发者不可或缺的“系统听诊器”。建议读者通过以下步骤深化理解:

  1. 在本地环境尝试所有示例命令;
  2. 结合man ps文档探索更多参数;
  3. ps与其他工具(如awksort)组合,构建个性化监控脚本。

掌握ps不仅是一门技术,更是培养系统思维的关键一步。下次当您遇到进程相关的问题时,不妨先用ps命令“听诊”一番,或许能发现意想不到的线索。

最新发布