进程查看器 - ps 命令

本文详细介绍了Linux中的ps命令,用于查看当前运行的进程信息。内容包括ps命令的不同选项风格(如UNIX、BSD、GNU),如何查看所有运行中的进程,以及如何根据用户或进程ID筛选查看特定进程。示例展示了使用-u、-p等选项来查询指定用户或进程的详细信息。
摘要由CSDN通过智能技术生成

ps 命令是 process status 的简写,主要用于查询当前正在运行中进程的信息,它从 /proc/进程ID 目录中读取指定进程ID的信息

语法

ps [options]

ps 的选项非常多,总共有一百多个选项,可以通过 ps L | wc -l 命令查看ps的选项数量

这篇文章主要介绍 ps 命令的一些常用的用法,对于一些使用频率很低的选项不在这里讨论

选项风格

根据选项前是否有 -,ps命令的选项可以分成以下几种风格

  • UNIX风格: 选项前面必须以 - 开头
  • BSD分格: 选项前面必须不能以 - 开头
  • GNU风格: 选项前面必须以 -- 开头
[root@ecs-centos-7 ~]# ps p 842
  PID TTY      STAT   TIME COMMAND
  842 ?        Sl    12:55 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
[root@ecs-centos-7 ~]# ps -p 842
  PID TTY          TIME CMD
  842 ?        00:12:55 mysqld
[root@ecs-centos-7 ~]# ps --pid 842
  PID TTY          TIME CMD
  842 ?        00:12:55 mysqld

上面的例子中 ps p 842ps -p 842 以及 ps --pid 842 都是查询进程ID为842的进程信息,只不过分别用ps命令选项的 BSD风格、UNIX风格、GNU风格而已

==注意:ps命令选项可以混用不同风格的选项,但是可能会出现冲突,兼容混用的主要原因是帮助过度旧的脚本和习惯,我们实际使用的时候尽量使用同一种风格的选项==

所有运行中的进程

通过 ps -A 或者 ps -e 命令可以查看所有运行中的进程

[tt@ecs-centos-7 ~]$ ps -fA | more
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug14 ?        00:00:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Aug14 ?        00:00:00 [kthreadd]
root         4     2  0 Aug14 ?        00:00:00 [kworker/0:0H]

[tt@ecs-centos-7 ~]$ ps -fe | more
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug14 ?        00:00:07 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 Aug14 ?        00:00:00 [kthreadd]
root         4     2  0 Aug14 ?        00:00:00 [kworker/0:0H]

列说明:

UID: 进程所属的用户
PID: 进程ID
PPID: 进程的父进程ID
C: 同 %CPU,进程CPU利用率
STIME: 进程启动的日期
TTY: 进程相关的终端
TIME: 进程占用的总CPU时间
CMD: 进程启动命令以及参数

-f-F选项:全格式列表选项,这个选项和其他UNIX风格的选项组合使用可以使得结果多出一些列

上面例子中 -A-e 选项都是查看所有运行的进程信息的,后面重定向到 more 命令是为了分页查看结果

查看指定用户的进程

-u、-U、U、--user、--User 这几个选项后面接用户名列表(用户名之间用逗号分隔) 或用户ID列表(ID之间用逗号分隔) , 可以查看指定用户列表中用户的进程

  • 用户名列表
    [root@ecs-centos-7 ~]# ps -u tt
    PID TTY          TIME CMD
    13087 pts/8    00:00:00 bash
    13257 pts/9    00:00:00 bash
    [root@ecs-centos-7 ~]# ps -u wl
    PID TTY          TIME CMD
    13275 pts/11   00:00:00 bash
    13294 pts/11   00:00:00 top
    

[root@ecs-centos-7 ~]# ps -u tt,wl PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top


上面例子中分别查看了用户 ```tt``` 和 ```wl``` 的进程,用户列表```tt,wl```的进程实际上是列表中每个用户的进程组合


- 用户ID列表

[root@ecs-centos-7 ~]# id tt uid=1003(tt) gid=1003(tt) groups=1003(tt) [root@ecs-centos-7 ~]# id wl uid=1000(wl) gid=1000(wl) groups=1000(wl)

[root@ecs-centos-7 ~]# ps -u 1003 PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash [root@ecs-centos-7 ~]# ps -u 1000 PID TTY TIME CMD 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top

[root@ecs-centos-7 ~]# ps -u 1003,1000 PID TTY TIME CMD 13087 pts/8 00:00:00 bash 13257 pts/9 00:00:00 bash 13275 pts/11 00:00:00 bash 13294 pts/11 00:00:00 top


上面例子中分别按照用户```tt```和```wl```的用户ID 查看进程, 用户ID列表```1003,1000```的进程实际上是列表中每个用户ID的进程组合



### <font color=CornflowerBlue>查看指定进程ID的进程</font>

```ps p 进程ID```、```ps -p 进程ID```、```ps --pid 进程ID``` 这三种方式都可以查看指定进程ID的进程信息

[root@ecs-centos-7 ~]# ps -p 1,2,4 PID TTY TIME CMD 1 ? 00:00:07 systemd 2 ? 00:00:00 kthreadd 4 ? 00:00:00 kworker/0:0H


上面例子中查看进程ID分别为 ```1,2,4``` 的进程信息,使用 ```ps p 1,2,4``` 命令或者 ```ps --pid 1,2,4``` 命令也可以得到和例子中一样的结果



### <font color=CornflowerBlue>查看线程</font>

知道了进程ID,可以通过 ```ps -fL -p 进程ID``` 命令查看指定进程的线程信息

[root@ecs-centos-7 ~]# ps -fL -p 842 UID PID PPID LWP C NLWP STIME TTY TIME CMD mysql 842 1 842 0 27 Aug14 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid mysql 842 1 1043 0 27 Aug14 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid mysql 842 1 1061 0 27 Aug14 ? 00:00:37 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid


线程相关字段说明:

LWP: 线程ID NLWP: 线程数量


上面的例子查看进程ID为842的进程(MySQL进程)的线程信息,由于输出信息太多,这里只截取了一部分,从结果可以看出,MySQL进程有27个线程,其中 ```PID``` 和 ```LWP``` 值相同的是主线程


### <font color=CornflowerBlue>根据进程名字获得进程ID</font>

在服务器开发中,关闭服务器进程的时候,通常都需要根据进程名字取得进程ID,然后再利用 kill 命令向指定进程ID发送终止信号

[root@ecs-centos-7 ~]# ps aux | grep mysql | grep -v grep | awk '{print $2}' 842


上面的例子中,```ps aux``` 是查找所有用户运行的进程,```grep mysql``` 是从前面查找的结果中过滤出含有```mysql```的关键字,```grep -v grep``` 是从上一步的结果中进一步去掉含有 ```grep``` 的关键字,最后 ```awk '{print $2} ``` 是输出最终结果中第二列的值,也即MySQL的进程ID

==注意:ps命令查找的结果中程序启动命令以及参数(CMD列)最多只能显示15个字符宽度,如果应用程序名字查过15字符长度,就会被截断,此时用 grep 查找应用程序名字的话会出现找不到应用程序的情况。关于这个问题请参考== [ps 命令显示不完整的问题](https://mp.weixin.qq.com/s/v_t2JCagyCH1b9ksMQp6FQ)


### <font color=CornflowerBlue>总结</font>

在对 Linux 系统中问题进行故障排除的过程中,ps命令是常用的命令之一,它有很多的选项,但是大多数时候都在使用 ```ps aux ``` 或者 ```ps -ef ``` 命令查看正在运行进程的信息

有关 ps 命令更多选项可以通过 ```man ps```命令查看

##### <font color=CornflowerBlue>推荐阅读</font>
[Linux 下top命令详解](https://mp.weixin.qq.com/s/hqWQPDf9x8CP_Mf4KdrlIg)

[ps 命令显示不完整的问题](https://mp.weixin.qq.com/s/v_t2JCagyCH1b9ksMQp6FQ)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值