[Linux] ps命令详解

时间:2021-07-12 09:17:56

Linux中的ps (Process Status)命令用来列出系统中当前运行的那些进程。

 

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

 

1.命令说明
    名称:ps
    使用权限:所有使用者
    使用方式:ps [options] [--help]
    说明:显示瞬间行程 (process) 的动态

 

2.常用命令参数

-a 显示同一终端下的所有程序
-A 显示所有进程 (等价于-e)
-w 显示加宽可以显示较多的资讯

-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程

c  显示进程的真实名称
-C<命令> 列出指定命令的状况  显示一个名为getty的进程的信息 ps -C getty

-d 显示所有进程,但省略所有的会话引线(utility)

-e 等于“-A”
e  显示环境变量

-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
f  显示程序间的关系(树形结构  pstree命令也是显示树形结构)

x 显示所有程序,不以终端机来区分。
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)

-N 反向选择

-H 显示树状结构
r  显示当前终端的进程
T  显示当前终端的所有程序
u  指定用户的所有进程

-t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
-p pid 父进程id
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。


-l 长格式(有F,wchan,C 等字段)
-L 参数,后面加上特定的PID 显示特定进程的线程

--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
--help 显示帮助信息
--version 显示版本显示
--sort -pcpu 根据pcpu排序

 

3.ps 显示列的意义

[root@localhost cc]# ps -l

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 17398 17394  0  75   0 - 16543 wait   pts/0    00:00:00 bash
4 R     0 17469 17398  0  77   0 - 15877 -      pts/0    00:00:00 ps


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

 

4. 范例

1. 用 | 管道和 more 连接起来分页查看

    命令:ps -aux |more

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

    命令:ps -aux > ps.txt

3. 输出指定的字段

    命令: ps -o pid,ppid,pgrp,tpgid,comm 


4. 结合watch命令 实时显示系统的进程状态

    命令: watch -n 1ps -aux --sort -pmem, -pcpu | head 20