纠正错误 添加实例

ps

报告当前系统的进程状态

补充说明

ps 命令是 process status 的缩写,用于显示当前系统的进程状态。进程是程序在运行时的实例,每个进程都有一个唯一的进程标识符(PID),以及一些相关的属性,如用户、优先级、内存占用、CPU使用率等。ps命令可以查看这些信息,帮助用户了解系统的运行情况,以及进行进程管理和优化。

适用的Linux版本

ps命令是一个标准的Linux命令,几乎所有的Linux发行版都支持它。不同的发行版可能会提供不同的ps版本,例如procps-ng或BSD ps。这些版本之间可能会有一些语法和选项的差异,但是基本功能和用法都是相同的。用户可以通过ps --version命令查看自己系统上的ps版本。

基本语法

ps [options]

options 参数支持三种语法格式:

# UNIX风格
ps -ef

# BSD风格
ps aux

# GNU风格
ps --pid 1234

如果不指定任何参数,ps命令默认只显示当前终端下属于当前用户的进程。

UNIX风格

Unix风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的ps命令继承下来的。

BSD风格

Unix 和 BSD 类型的参数有很多重叠的地方。使用其中某种类型参数得到的信息也同样可以使用另一种获得。大多数情况下,你只要选择自己所喜欢格式的参数类型就行了

GNU风格

GNU开发人员在这个新改进过的 ps 命令中加入了另外一些参数。其中一些GNU长参数复制了现有的Unix或BSD类型的参数,而另一些则提供新功能。

示例

使用UNIX风格打印出所有的进程

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:22 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2     0  0 10:22 ?        00:00:00 [kthreadd]
root         4     2  0 10:22 ?        00:00:00 [kworker/0:0H]

显示的完整格式输出信息有:

使用 -l 的输出的信息还会增加一些:

使用BSD风格打印出所有的进程

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 128036  3796 ?        Ss   10:22   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S    10:22   0:00 [kthreadd]

在 BSD 风格下的 l 参数输出的信息基本与 Unix 一致,多了一些字段:

按照指定字段排序输出结果

例如按照CPU使用率降序排序

# 使用--sort选项,后跟排序规则,以`-`开头表示降序,以`+`开头表示升序,后跟字段名
$ ps --sort -pcpu -ef

以树状结构显示进程间关系

可以看出哪些进程是父进程,哪些是子进程

# 使用--forest选项,可以与其他选项组合使用
$ ps --forest -ef

自定义格式显示信息

例如只显示进程的PID、用户和命令

# 使用-o选项,后跟字段列表,字段名不区分大小写
$ ps -o pid,user,cmd -ef

查看线程(LWP)

linux没有线程的概念,通过轻量级进程(LWP)来实现线程的功能,用户进程作为一个管理进程来管理下面的LWP。

# 查看指定进程对应的LWP
$ ps -Lf pid