进程查看器 - ps 命令

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

<font color=CornflowerBlue>语法</font>

ps [options]

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

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

<font color=CornflowerBlue>选项风格</font>

根据选项前是否有 -,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命令选项可以混用不同风格的选项,但是可能会出现冲突,兼容混用的主要原因是帮助过度旧的脚本和习惯,我们实际使用的时候尽量使用同一种风格的选项==

<font color=CornflowerBlue>所有运行中的进程</font>

通过 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 命令是为了分页查看结果

<font color=CornflowerBlue>查看指定用户的进程</font>

-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

上面例子中分别查看了用户 ttwl 的进程,用户列表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

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

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

ps p 进程IDps -p 进程IDps --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个线程,其中 PIDLWP 值相同的是主线程

<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 命令显示不完整的问题

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

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

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

<font color=CornflowerBlue>推荐阅读</font>

Linux 下top命令详解

ps 命令显示不完整的问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342