文章目录
- ps概述
- ps语法
- 指定pid进行查看
ps概述
ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。
ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不同的 Linux 发行版上,ps 命令的语法各不相同,为此,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps 命令的用户。
ps语法
ps 命令的基本格式如下:
#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 Linux 标准命令格式
[root@localhost ~]# ps -les
选项:
- a:显示一个终端的所有进程,除会话引线外;
- u:显示进程的归属用户及内存的使用情况;
- x:显示没有控制终端的进程;
- -l:长格式显示更加详细的信息;
- -e:显示所有进程;
- -f 完整格式显示
可以看到,ps 命令有些与众不同,它的部分选项不能加入"-“,比如命令"ps aux”,其中"aux"是选项,但是前面不能带“-”。
大家如果执行 “man ps” 命令,则会发现 ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,我建议大家记忆几个固定选项即可。比如:
- “ps aux” 可以查看系统中所有的进程;
- “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
- “ps -ef” 同le相似
- “ps -l” 只能看到当前 Shell 产生的进程;
有这三个命令就足够了,下面分别来查看。
【例 1】ps aux
[root@localhost ~]# ps aux
#查看系统中所有的进程
[root@EMS3 ~]# ps aux|head -n  10
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 191932  5000 ?        Ss    2022  46:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S     2022   0:04 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2022   4:19 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S     2022   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S     2022   0:48 [migration/0]
root        10  0.0  0.0      0     0 ?        S<    2022   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S     2022   0:15 [watchdog/0]
…省略部分输出…
或使用 ps aux |head -n 10 只展示前10,条记录,方便查看列头含义

【例2 】 ps -ef
[root@EMS3 ~]# ps -ef|head -n  10
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2022 ?        00:46:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2     0  0  2022 ?        00:00:04 [kthreadd]
root         3     2  0  2022 ?        00:04:19 [ksoftirqd/0]
root         5     2  0  2022 ?        00:00:00 [kworker/0:0H]
root         7     2  0  2022 ?        00:00:48 [migration/0]
root        10     2  0  2022 ?        00:00:00 [lru-add-drain]
root        11     2  0  2022 ?        00:00:15 [watchdog/0]
【例3 】 ps -le
 "ps aux"命令可以看到系统中所有的进程,"ps -le"命令也能看到系统中所有的进程。由于 “-l” 选项的作用,所以 “ps -le” 命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了。
[root@localhost ~]# ps -le
[root@EMS3 ~]# ps -le|head -n  10
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 - 47983 ep_pol ?        00:46:32 systemd
1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:04 kthreadd
1 S     0     3     2  0  80   0 -     0 smpboo ?        00:04:19 ksoftirqd/0
5 S     0     5     2  0  80   0 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0     7     2  0 -40   - -     0 smpboo ?        00:00:48 migration/0
1 S     0     8     2  0  80   0 -     0 rcu_gp ?        00:00:00 rcu_bh
1 S     0     9     2  0  80   0 -     0 rcu_gp ?        00:58:12 rcu_sched
5 S     0    10     2  0  60 -20 -     0 rescue ?        00:00:00 lru-add-drain
5 S     0    11     2  0 -40   - -     0 smpboo ?        00:00:15 watchdog/0
…省略部分输出…
或使用 ps -ef |head -n 10 只展示前10,条记录,方便查看列头含义
 
 【例 4】如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 “ps -l” 命令就足够了:
[root@localhost ~]# ps -l
#查看当前登录产生的进程
F S UID   PID  PPID C PRI NI ADDR SZ WCHAN TTY       TIME CMD
4 S 0   18618 18614 0  80  0 - 1681  -     pts/1 00:00:00 bash
4 R 0   18683 18618 4  80  0 - 1619  -     pts/1 00:00:00 ps
可以看到,这次从 pts/1 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。
我们再来说说僵尸进程。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。
僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。
指定pid进行查看
格式 :
 ps -p xxx
 ps -p xxx -f 更详细的信息






![Linux awk [-v] {print} 命令](https://img-blog.csdnimg.cn/f270441eb4eb461ea362b05498fc1033.png)












