文章作者: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命令只会显示运行在当前控制台下的属于当前用户的进程。
$ 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 -pcpu
或ps -aux --sort -pmem
- -C cmdlist,显示包含在cmdlist列表中的进程,例如
ps -C test
- -L 显示进程中的线程,例如
ps -L 123
,123为进程ID - -j 显示任务信息
- -H 用层级显示进程,树状结构
ps命令参数还有很多,根据需要自己查询吧。