Linux的ps命令

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

1. ps命令介绍及Linux进程状态介绍

Linux中的ps命令是Process Status的缩写,ps命令用来列出系统中当前运行的那些进程。ps命令可以列出当前进程的运行情况(状态、时间等信息)。在Linux系统中,进程有5中状态,在ps命令中分别用5个大写字母表示:

  • R (TASK_RUNNING),可执行状态。
    runnable (on run queue),正在运行或在运行队列中等待的进程
  • S (TASK_INTERRUPTIBLE),可中断的睡眠状态。
    sleeping,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
  • D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
    uninterruptible sleep (usually IO),进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。
  • T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态。
    traced or stopped,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行)。
  • Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。
    a defunct process,在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)。

除此之外,还有ps命令还有一些进程状态信息:

  • < 优先级高的进程
  • l 多线程状态
    • 前台进程
  • L 锁定状态
  • N 优先级低的进程

2. ps命令用法

默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程。

1
2
3
4
5
6
7
8
9
10
11
$ ps
PID TTY TIME CMD
50498 ttys000 0:00.02 -bash

$ ps -f
UID PID PPID C STIME TTY TIME CMD
501 50498 50497 0 9:27下午 ttys000 0:00.08 -bash

$ ps -l
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 50498 50497 4006 0 31 0 2466156 1648 - S 0 ttys000 0:00.08 -bash

ps命令的结果列信息表示如下:

  • UID 启动进程的用户
  • PID 进程ID
  • PPID 进程的父进程ID
  • C 进程生命周期中的CPU利用率
  • TTY 运行在哪个终端
  • TIME 进程已用CPU时间
  • CMD 进程的命令
  • F 内核分配给进程的标记
  • PRI 进程的优先级
  • NI 谦让度值用来参与决定优先级
  • SZ 如果进程被换出,所需要的空间大小
  • WCHAN 进程休眠的内核函数的地址
  • ADDR 进程的内存地址
  • S 进程的状态,(O表示正在运行,S表示休眠,R表示运行,Z代表僵化,T代表停止)

ps命令的常用参数有:

  • -e,-A 显示所有进程
  • -f 显示完整格式的输出
  • -l 显示长列表
  • -a,所有进程,加上-x参数会显示没有控制终端的进程
  • -u username,显示指定用户的进程,例如ps -u ltc
  • -aux 按照CPU或者内存用量来筛选进程,例如ps -aux --sort -pcpups -aux --sort -pmem
  • -C cmdlist,显示包含在cmdlist列表中的进程,例如ps -C test
  • -L 显示进程中的线程,例如ps -L 123,123为进程ID
  • -j 显示任务信息
  • -H 用层级显示进程,树状结构

ps命令参数还有很多,根据需要自己查询吧。

如果有收获,可以请我喝杯咖啡!