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

linux环境下随时照看服务器进程的ps和top命令

文章目录

  • 前言
  • ps命令
    • 语法格式
    • 语法规范
    • 常用的ps选项
    • ps命令的表头
    • 进程状态
      • 常规状态码
      • BSD格式状态码
    • 进程相关的后续命令
  • top命令
    • 语法格式
    • 常用的top选项和快捷键
    • top命令的表头
  • 总结

前言

在linux环境服务器下通常是不会安装图形界面的,这时如果想看程序是否在正常运行着,就不能像在windows上一样去查看任务管理器,而是需要通过命令来查询程序的进程运行情况,ps 就是一个查询linux环境下进程运行状态的命令,请注意这个可不是我们P图用的那个工具哦。

ps命令

ps 命令在man手册中描述是 “report a snapshot of the current processes”,其实它的作用就是上报程序运行时的一个快照。

ps displays information about a selection of the active processes. If you want a repetitive update of the selection and the displayed information, use top(1) instead.

man手册中的这句话也很好理解,ps 命令执行一次就会显示一次所选进程的信息,若想重复刷新显示所选进程的信息,可以使用 top 命令,从作用上来看,可以简单理解为 top 命令是一个反复执行的 ps 命令。

语法格式

ps [options]

ps 命令的格式很简单,但是为什么感觉同一个查询进程的需求,每个人写出来的命令都不太一样呢?其实这是因为有好几种语法规范,无论怎么写都可以,甚至交叉混合的写命令都是能识别的,比如最常见的查询所有进程有些人会写成 ps -ef,而有的人会写成 ps aux,这两种都是可以的。

语法规范

ps -ef 是使用了UNIX选项,是一种标准语法,而 ps aux使用了BSD选项,是一种BSD语法,另外还有一种加两个短横线的写法,例如 ps --pid 3678,这是一种GNU长选项。

常用的ps选项

  1. 显示所有的进程,一般搭配grep使用
ps aux | grep processname
  1. 显示指定的列,可以使用 -eo 来指列名,我最常用的 cmd 是启动时的命令,lstart 是启动时的时间
[root@VM-0-3-centos ~]# ps -eo cmd,lstart | grep sshd
usr/sbin/sshd -D           Tue Feb  9 11:13:55 2021
  1. 以树形结构显示进程
ps -axjf
  1. 查询指定用户的进程
ps -fu root
  1. 按cpu使用率降序排序
ps -aux --sort -pcpu
  1. 按内存使用率降序排序
ps -aux --sort +pmem

ps命令的表头

[root@VM-0-3-centos ~]# ps -aux --sort -pcpu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     17444  0.4  3.7 994796 71276 ?        Sl    2021 181:54 /usr/local/qcloud/YunJing/YDEyes/YDService
root      8572  0.3  0.7 614824 14416 ?        Sl   Jan20  21:35 barad_agent
root         1  0.0  0.1 191084  3336 ?        Ss    2021  76:42 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S     2021   0:09 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<    2021   0:00 [kworker/0:0H]
root      1063  0.0  0.0 110208   792 tty1     Ss+   2021   0:00 /sbin/agetty --noclear tty1 linux
root      1064  0.0  0.0 110208   772 ttyS0    Ss+   2021   0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
root      2388  0.0  0.1 157696  1952 pts/0    R+   00:27   0:00 ps -aux --sort -pcpu
root         6  0.0  0.0      0     0 ?        S     2021  13:09 [ksoftirqd/0]

执行 ps 命令通常有以上几列:USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND

USER:进程所属用户名
PID:进程ID
%CPU:进程CPU使用率,注意所有CPU使用率加起来可以超过100%,如果有4个CPU,在不考虑多核的情况下,最大应该为400%
%MEM:进程内存使用率,可以配合 free -h 命令使用
VSZ:进程使用的虚拟内存量
RSS:进程占用的固定内存量
TTY:进程在哪个终端上运行,若与终端无关,则显示 ?
STAT:进程启动的时间
START:进程状态,是一个组合值,每个符号有单独含义,见下文
TIME:进程使用CPU运行的时间
COMMAND:启动进程时执行的命令的名称和参数

进程状态

这一部分是要是对man手册的翻译内容

Here are the different values that the s, stat and state output specifiers (header "STAT" or "S")
    will display to describe the state of a process:

           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped by job control signal
           t    stopped by debugger during the tracing
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

   For BSD formats and when the stat keyword is used, additional characters may be displayed:

           <    high-priority (not nice to other users)
           N    low-priority (nice to other users)
           L    has pages locked into memory (for real-time and custom IO)
           s    is a session leader
           l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
           +    is in the foreground process group

常规状态码

D: 无法中断的休眠状态(通常 IO 的进程)
R: 正在运行可中在队列中可过行的;
S: 处于休眠状态
T: 停止或被追踪
W: 进入内存交换(从内核2.6开始无效)
X: 死掉的进程(基本很少见)
Z: 僵尸进程,想杀死通常需要重启系统

BSD格式状态码

<: 优先级高的进程
N: 优先级较低的进程
L: 有些页被锁进内存
s: 一个会话进程的领导者(在它之下有子进程)
l: 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+: 位于后台的进程组

进程相关的后续命令

  1. 查询进程的可执行文件所在位置
cat /proc/进程id
  1. 按进程名查询进程id
pidof 进程名

top命令

语法格式

top [options]

top 命令的man手册巨长,它的作用是动态显示进程状态,实际上就是一份份静态数据间隔显示而已,虽然他也有很多参数,但是通常仅使用一个 top 命令即可。

常用的top选项和快捷键

  1. 显示top帮助
top -hV
  1. 按照CPU使用率排序

运行top命令后,输入大写字母P,也就是按快捷键 ctrl+p

  1. 按照内存使用率排序

运行top命令后,输入大写字母M,也就是按快捷键 ctrl+m

  1. 展开多核cpu显示

运行top命令后,输入数字1

  1. 切换显示命令名称和完整命令行

运行top命令后,输入小写字母c

  1. 切换显示平均负载和启动时间信息

运行top命令后,输入小写字母l

top命令的表头

[root@VM-0-3-centos ~]# top

top - 00:07:35 up 0 min,  0 users,  load average: 0.52, 0.58, 0.59
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.4 us,  8.0 sy,  0.0 ni, 88.4 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
KiB Mem :  8248540 total,  3284196 free,  4727868 used,   236476 buff/cache
KiB Swap: 13107196 total, 13080444 free,    26752 used.  3379816 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0    8940    316    272 S   0.0  0.0   0:00.15 init
   10 root      20   0    8940    224    176 S   0.0  0.0   0:00.00 init
   11 albert    20   0   15024   3568   3468 S   0.0  0.0   0:00.24 bash
   38 albert    20   0   15900   1960   1420 R   0.0  0.0   0:00.04 top

执行 top 命令后默认有这些列 PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND,它们的含义分表是:

PID:进程id
USER:进程所有者用户名
PR:优先级
NI:NICE值.负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RES
RES:进程使用的未被换出的物理内存大小,单位KB,RES=CODE+DATA
SHR:共享内存大小,单位KB,
S:进程状态,D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
%CPU:CPU使用百分比
%MEM、内存使用百分比
TIME+:进程使用的CPU时间总计,单位1/100秒
COMMAND:启动命令

总结

  • 显示所有进程可以使用 ps -ef 或者 ps aux,他们通常是后续过滤的第一步
  • 按cpu使用率降序排序使用 ps aux --sort -pcpu,按内存使用率降序排序使用 ps aux --sort +pmem
  • top 命令结果的第一行是整体信息,包括了当前时间,系统已运行时间,登录用户数,系统负载等信息
  • top 命令中按大写字母 P 会按照CPU排序,按大写字母 M 会按照内存排序

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

小孩子才有对错,长大了都是利益。做选择的本质是分类,权衡利弊的过程是分类,趋利避害的行事生活更是分类,所以遇到选择我们才要考虑方方面面,因为这样我们才有足够的理由来把它归为有利的一类,还是有害的一类~

相关文章:

  • 简单梳理下git的使用感受,思考git中最重要的是什么
  • 总结下各种常见树形结构的定义及特点(二叉树、AVL树、红黑树、Trie树、B树、B+树)
  • epoll的LT模式(水平触发)和ET模式(边沿触发)
  • C++可变参数模板的展开方式
  • 恶搞一下std::forward函数
  • C++11新式洗牌std::shuffle与老式洗牌函数std::random_shuffle的区别
  • linux环境下常用的网络命令ping、telnet、traceroute、tcpdump
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • linux环境下常用的查找命令find、which、grep
  • 了解git裸仓库并利用post-receive自动化部署
  • C++17新语法之if和switch语句中可以初始化变量啦
  • C++11中的noexcept说明符和操作符
  • 偶然在github开源项目中发现了.travis.yml这货
  • C++17使用std::optional表示一个可能存在的值
  • 推荐一个C++枚举转字符串的开源项目magic_enum
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【comparator, comparable】小总结
  • django开发-定时任务的使用
  • DOM的那些事
  • express.js的介绍及使用
  • HTML5新特性总结
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • jQuery(一)
  • js继承的实现方法
  • JS数组方法汇总
  • MQ框架的比较
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Redis字符串类型内部编码剖析
  • Swoft 源码剖析 - 代码自动更新机制
  • Terraform入门 - 1. 安装Terraform
  • VuePress 静态网站生成
  • 如何利用MongoDB打造TOP榜小程序
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 听说你叫Java(二)–Servlet请求
  • 我看到的前端
  • zabbix3.2监控linux磁盘IO
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 通过调用文摘列表API获取文摘
  • ​flutter 代码混淆
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #图像处理
  • ${ }的特别功能
  • (1)虚拟机的安装与使用,linux系统安装
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (八)Spring源码解析:Spring MVC
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)http协议
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET实现之(自动更新)
  • @column注解_MyBatis注解开发 -MyBatis(15)