• 一天一个 Linux 命令(35):ps 命令


    一、简介

    Linux系统里的ps命令(英文全拼:process status)是用于显示当前系统的进程状态,列出系统中当前运行的进程。

    ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

    ps 命令提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。

    扩展:

    linux上进程的5种状态:

    1. 运行(正在运行或在运行队列中等待) 
    
    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 
    
    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 
    
    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 
    
    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 
    

    ps命令标识进程的5种状态码:

    D 不可中断 uninterruptible sleep (usually IO) 
    
    R 运行 runnable (on run queue) 
    
    S 中断 sleeping 
    
    T 停止 traced or stopped 
    
    Z 僵死 a defunct (”zombie”) process 
    

    二、格式说明

    ps [options]
    ps[参数]
    
    Usage:
     ps [options]
    
     Try 'ps --help <simple|list|output|threads|misc|all>'
      or 'ps --help <s|l|o|t|m|a>'
     for additional help text.
    
    For more details see ps(1).
    

    三、选项说明

    -a	显示所有终端机下执行的程序,除了阶段作业领导者之外
    a	显示现行终端机下的所有程序,包括其他用户的程序
    -A	显示所有程序
    -c	显示CLS和PRI栏位
    c	列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示
    -C <指令名称>	指定执行指令的名称,并列出该指令的程序的状况
    -d	显示所有程序,但不包括阶段作业领导者的程序
    -e	此选项的效果和指定”A”选项相同
    e	列出程序时,显示每个程序所使用的环境变量
    -f	显示UID,PPIP,C与STIME栏位
    f	用ASCII字符显示树状结构,表达程序间的相互关系
    -g <群组名称>	此选项的效果和指定”-G”选项相同,当亦能使用阶段作业领导者的名称来指定
    g	显示现行终端机下的所有程序,包括群组领导者的程序
    -G <群组识别码>	列出属于该群组的程序的状况,也可使用群组名称来指定
    h	不显示标题列
    -H	显示树状结构,表示程序间的相互关系
    -j或j	采用工作控制的格式显示程序状况
    -l或l	采用详细的格式来显示程序状况
    L	列出栏位的相关信息
    -m或m	显示所有的执行绪
    n	以数字来表示USER和WCHAN栏位
    -N	显示所有的程序,除了执行ps指令终端机下的程序之外
    -p <程序识别码>	指定程序识别码,并列出该程序的状况
    p <程序识别码>	此选项的效果和指定”-p”选项相同,只在列表格式方面稍有差异
    r	只列出现行终端机正在执行中的程序
    -s <阶段作业>	指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况
    s	采用程序信号的格式显示程序状况
    S	列出程序时,包括已中断的子程序资料
    -t <终端机编号>	指定终端机编号,并列出属于该终端机的程序的状况
    t <终端机编号>	此选项的效果和指定”-t”选项相同,只在列表格式方面稍有差异
    -T	显示现行终端机下的所有程序
    -u <用户识别码>	此选项的效果和指定”-U”选项相同
    u	以用户为主的格式来显示程序状况
    -U <用户识别码>	列出属于该用户的程序的状况,也可使用用户名称来指定
    U <用户名称>	列出属于该用户的程序的状况
    v	采用虚拟内存的格式显示程序状况
    -V或V	显示版本信息
    -w或w	采用宽阔的格式来显示程序状况
    x	显示所有程序,不以终端机来区分
    X	采用旧式的Linux i386登陆格式显示程序状况
    -y	配合选项”-l”使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位
    -- <程序识别码>	此选项的效果和指定”p”选项相同
    --cols <每列字符数>	设置每列的最大字符数
    --columns <每列字符数>	此选项的效果和指定”--cols”选项相同
    --cumulative	此选项的效果和指定”S”选项相同
    --deselect	此选项的效果和指定”-N”选项相同
    --forest	此选项的效果和指定”f”选项相同
    --headers	重复显示标题列
    --help	在线帮助
    --info	显示排错信息
    --lines <显示列数>	设置显示画面的列数
    --no-headers	此选项的效果和指定”h”选项相同,只在列表格式方面稍有差异
    --group <群组名称>	此选项的效果和指定”-G”选项相同
    --Group <群组识别码>	此选项的效果和指定”-G”选项相同
    --pid <程序识别码>	此选项的效果和指定”-p”选项相同
    --rows <显示列数>	此选项的效果和指定”--lines”选项相同
    --sid <阶段作业>	此选项的效果和指定”-s”选项相同
    -tty <终端机编号>	此选项的效果和指定”-t”选项相同
    --user <用户名称>	此选项的效果和指定”-U”选项相同
    --User <用户识别码>	此选项的效果和指定”-U”选项相同
    --version	此选项的效果和指定”-V”选项相同
    --widty <每列字符数>	此选项的效果和指定”-cols”选项相同
    

    常用的参数,平常只要掌握常用的参数即可。

    a  显示所有进程
    
    -a 显示同一终端下的所有程序
    
    -A 显示所有进程
    
    c  显示进程的真实名称
    
    -N 反向选择
    
    -e 等于“-A”
    
    e  显示环境变量
    
    f  显示程序间的关系
    
    -H 显示树状结构
    
    r  显示当前终端的进程
    
    T  显示当前终端的所有程序
    
    u  指定用户的所有进程
    
    -au 显示较详细的资讯
    
    -aux 显示所有包含其他使用者的行程 
    
    -C<命令> 列出指定命令的状况
    
    --lines<行数> 每页显示的行数
    
    --width<字符数> 每页显示的字符数
    
    --help 显示帮助信息
    
    --version 显示版本显示
    

    四、命令功能

    用来显示当前的进程状态

    五、常见用法

    5.1 把所有进程显示出来

    # ps -aux
    #或者
    # ps -A
    #或者
    # ps -ef
    
     

    5.2 把所有进程显示出来,并输出到ps.txt文件:

    # ps -aux > ps.txt
    

    5.3 查找特定进程, 通过ps 与grep组合使用

    # ps -ef | grep php-fpm
    
     

    5.4 显示指定用户的进程

    # ps -u root
    

    5.5 按 CPU 资源的使用量对进程进行排序

    # ps aux | sort -nk 3
    

    5.6 按内存资源的使用量对进程进行排序

    # ps aux | sort -rnk 4 
    

    5.7 将目前属于您自己这次登入的 PID 与相关信息列示出来

    # ps -l
    
     
    F 代表这个程序的旗标 (flag), 4 代表使用者为 super userS 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍UID 程序被该 UID 所拥有PID 就是这个程序的 ID !PPID 则是其上级父程序的IDC CPU 使用的资源百分比PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍NI 这个是 Nice 值,在下一小节我们会持续介绍ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"SZ 使用掉的内存大小WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作TTY 登入者的终端机位置TIME 使用掉的 CPU 时间。CMD 所下达的指令为何
    

    5.8 目前所有的正在内存当中的程序

    # ps aux
    
    [root@service-01 ~]# ps auxUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.0  0.0 191092  3668 ?        Ss   Mar23 163:50 /usr/lib/systemd/systemd --switched-root --system --deserialroot         2  0.0  0.0      0     0 ?        S    Mar23   0:37 [kthreadd]root         4  0.0  0.0      0     0 ?        S<   Mar23   0:00 [kworker/0:0H]root         6  0.0  0.0      0     0 ?        S    Mar23  11:47 [ksoftirqd/0]root         7  0.0  0.0      0     0 ?        S    Mar23   2:54 [migration/0]root         8  0.0  0.0      0     0 ?        S    Mar23   0:00 [rcu_bh]
    
     
    USER:该 process 属于那个使用者账号的PID :该 process 的号码%CPU:该 process 使用掉的 CPU 资源百分比%MEM:该 process 所占用的物理内存百分比VSZ :该 process 使用掉的虚拟内存量 (Kbytes)RSS :该 process 占用的固定的内存量 (Kbytes)TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。STAT:该程序目前的状态,主要的状态有    D :无法中断的休眠状态 (通常 IO 的进程)	R :该程序目前正在运作,或者是可被运作	S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。	T :该程序目前正在侦测或者是停止了	Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态START:该 process 被触发启动的时间TIME :该 process 实际使用 CPU 运作的时间COMMAND:该程序的实际指令
    

    5.9 以类似进程树的方式显示

    ps -axjf
    
     

     

  • 相关阅读:
    iPhone页面的常用调试方法
    前端代码相关规范
    使用BEM命名规范来组织CSS代码
    安卓微信页面的调试
    前端调试的那些手段
    Webpack打包构建太慢了?试试几个方法
    [前端] 记录工作中遇到的各种问题(Bug,总结,记录)
    jqPlot图表插件学习之饼状图和环状图
    jqPlot图表插件学习之阴阳烛图
    jqPlot图表插件学习之数据节点高亮和光标提示
  • 原文地址:https://www.cnblogs.com/joshua317/p/15509590.html
Copyright © 2020-2023  润新知