Linux ps命令的用法(非常详细)
ps 是用来静态地查看系统中正在运行的进程的命令。
这个命令有些特殊,它的部分选项不能加入“-”,如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps 命令的部分选项需要遵守 BSD 操作系统的格式,所以 ps 命令的常用选项的组合是固定的,其格式如下:
大家如果执行“man ps”命令查看 ps 命令的帮助,就会发现 ps 命令的选项为了适应不同种类的 UNIX 系统,可用格式非常多,不方便记忆。因此,建议大家记忆几个固定选项即可,例如:
有这三个命令就足够了,下面分别进行查看:
这两个命令的基本作用是一致的,掌握其中一个就足够了,命令如下:
不过,有时我们不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那么只需使用“ps-l”命令就足够了,具体如下:
再来说说僵尸进程。僵尸进程的产生一般都是进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中。僵尸进程会对主机的稳定性产生影响,因此在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后将其强制终止。
这个命令有些特殊,它的部分选项不能加入“-”,如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps 命令的部分选项需要遵守 BSD 操作系统的格式,所以 ps 命令的常用选项的组合是固定的,其格式如下:
[root@localhost ~]# ps aux # 查看系统中所有的进程,遵守 BSD 操作系统的格式 [root@localhost ~]# ps -le # 查看系统中所有的进程,使用 Linux 标准命令的格式 选项: a:显示一个终端的所有进程,除会话引线外 u:显示进程的归属用户及内存的使用情况 x:显示没有控制终端的进程 -l:长格式显示,显示更加详细的信息 -e:显示所有进程,和 -A 选项的作用一致
大家如果执行“man ps”命令查看 ps 命令的帮助,就会发现 ps 命令的选项为了适应不同种类的 UNIX 系统,可用格式非常多,不方便记忆。因此,建议大家记忆几个固定选项即可,例如:
- 执行“ps aux”命令可以查看系统中所有的进程;
- 执行“ps-le”命令可以查看系统中所有的进程,而且还能看到进程的父进程 PID 和进程优先级;
- 执行“ps-l”命令只能看到当前 shell 产生的进程。
有这三个命令就足够了,下面分别进行查看:
[root@localhost ~]# ps aux # 查看系统中所有的进程 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 1.7 107192 16712 ? Ss 13:15 0:01 /usr/lib/systemd/systemd rhgb --switched-root --system --deserialize root 2 0.0 0.0 0 0 ? S 13:15 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 13:15 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 13:15 0:00 [rcu_par_gp] ...省略部分输出...这里解释一下“ps aux”命令的输出,如下表所示:
字段 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的。 |
PID | 进程的 ID。 |
%CPU | 该进程占用 CPU 资源的百分比,值越高越耗费资源。 |
%MEM | 该进程占用物理内存的百分比,值越高越耗费资源。 |
VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
TTY |
进程运行的终端:
|
STAT |
进程状态:
|
START | 该进程的启动时间。 |
TIME | 该进程占用 CPU 的运行时间,不是系统时间。 |
COMMAND | 产生该进程的命令名。 |
- 使用“ps aux”命令可以看到系统中所有的进程;
- 使用“ps-le”命令也能看到系统中所有的进程。由于“-l”选项所具有的作用,所以“ps-le”命令能够看到更加详细的信息,如进程的父进程 PPID、优先级等。
这两个命令的基本作用是一致的,掌握其中一个就足够了,命令如下:
[root@localhost ~]# ps -le F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 26798 ep_pol ? 00:00:01 systemd 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd 1 I 0 3 2 0 60 -20 - 0 rcu_gp ? 00:00:00 rcu_gp 1 I 0 4 2 0 60 -20 - 0 rescue ? 00:00:00 rcu_par_gp ...省略部分输出...下面来解释一下这个命令的输出,如下表所示:
字段 | 含义 |
---|---|
F |
进程标志:
|
S | 进程状态,与 ps aux 的 STAT 状态一致,但不显示 “<” 以后的状态信息。 |
UID | 运行此进程的用户 ID。 |
PID | 进程的 ID。 |
PPID | 父进程的 ID。 |
C | 进程的 CPU 使用率(百分比)。 |
PRI | 进程优先级,数值越小优先级越高,越早被 CPU 执行。 |
NI | 进程的 nice 值,数值越小越早被执行。 |
ADDR | 进程在内存中的位置。 |
SZ | 进程占用的内存大小。 |
WCHAN | 进程正在休眠的内核函数名;运行中显示 “-”;多线程且不显示线程时显示 “*”。 |
TTY | 该进程由哪个终端产生。 |
TIME | 进程占用 CPU 的运算时间(不是系统时间)。 |
CMD | 产生此进程的命令名。 |
不过,有时我们不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那么只需使用“ps-l”命令就足够了,具体如下:
[root@localhost ~]# ps -l # 查看当前登录产生的进程 F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 2595 2594 0 80 0 - 2224 do_wai pts/4 00:00:00 bash 0 R 0 2720 2595 0 80 0 - 2579 - pts/4 00:00:00 ps可以看到,这次从 pts/4 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 shell,也就是 Bash;另一个是正在执行的 ps 命令。
再来说说僵尸进程。僵尸进程的产生一般都是进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中。僵尸进程会对主机的稳定性产生影响,因此在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后将其强制终止。