博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ps命令的10个例子
阅读量:6504 次
发布时间:2019-06-24

本文共 5084 字,大约阅读时间需要 16 分钟。

Linux ps 命令

linux的ps命令是一个查看系统运行的进程的一个最基础的工具。它提供了一个当前进程的快照,还带有一些具体的信息,比如用户id,cpu使用率,内存使用,命令名等,它不会像top或者htop一样实时显示数据。虽然它在功能和输出上更加简单,但它仍然是每个linux新手需要了解和学好的必要进程管理/检测工具。

在本篇中,我们会学习ps命令基本的用法:查找、过滤,以不同的方式排序。

语法说明

ps命令有两种不同风格的语法规则:BSD风格和UNIX风格。Linux新手经常感到困惑并会误解这两种风格,所以在继续下一步之前,我们来弄清楚一些基本的信息。

注意: "ps aux"不等同于"ps -aux"。比如"-u"用于显示用户的进程,但是"u"意味着显示具体信息。

BSD 形式 - BSD形式的语法的选项前没有破折号,如:

 
  1. ps aux

UNIX/LINUX 形式 - linux形式的语法的选项前有破折号,如:

 
  1. ps -ef

在linux系统上混合这两种语法是可以的。比如 "ps ax -f"。但是本章中我们主要讨论UNIX形式语法。

如何使用ps命令

1. 显示所有进程

下面的命令可以显示所有进程的列表。

 
  1. $ ps ax
  2. $ ps -ef

通过管道输出到"less"可以分页。

使用"u"或者"-f"选项可以显示进程的具体信息。

 
  1. $ ps aux
  2. $ ps -ef -f

为什么USER列显示的不是我的用户名,但是其他的像root,www-data等却显示? 对于所有的用户(包括你们的),如果长度大于8个字符,那么ps只会显示你的UID而不是用户名。

2. 显示用户进程

使用"-u"选项后跟用户名来过滤所属用户的进程。多个用户名可以用逗号分隔。

 
  1. $ ps -f -u www-data
  2. UID PID PPID C STIME TTY TIME CMD
  3. www-data 1329 1328 0 09:32 ? 00:00:00 nginx: worker process
  4. www-data 1330 1328 0 09:32 ? 00:00:00 nginx: worker process
  5. www-data 1332 1328 0 09:32 ? 00:00:00 nginx: worker process
  6. www-data 1377 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost
  7. www-data 1378 1372 0 09:32 ? 00:00:00 php-fpm: pool a.localhost
  8. www-data 4524 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
  9. www-data 4527 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start
  10. www-data 4528 2359 0 10:03 ? 00:00:00 /usr/sbin/apache2 -k start

3. 通过名字或者进程id显示进程

通过"-C"选项后面加上名字或者命令来搜索进程。

 
  1. $ ps -C apache2
  2. PID TTY TIME CMD
  3. 2359 ? 00:00:00 apache2
  4. 4524 ? 00:00:00 apache2
  5. 4525 ? 00:00:00 apache2
  6. ...

要通过进程id显示进程,就使用"-p"选项,并且还可以通过逗号分隔来指定多个进程id。

 
  1. $ ps -f -p 3150,7298,6544

"-C"必须提供精确的进程名,并且它并不能通过部分名字或者通配符查找。为了更灵活地搜索进程列表,通常使用grep命令。

 
  1. $ ps -ef | grep apache

4. 通过cpu或者内存使用排序进程

系统管理员通常想要找出那些消耗最多内存或者CPU的进程。排序选项会基于特定的字段或者参数来排序进程列表。

可以用'--sort'指定多个字段,并用逗号分割。除此之外,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序。这里有很多的用于排序的选项,通过man页来获取完整的列表。

 
  1. $ ps aux --sort=-pcpu,+pmem

显示前5名最耗cpu的进程。

 
  1. $ ps aux --sort=-pcpu | head -5
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  3. root 1 2.6 0.7 51396 7644 ? Ss 02:02 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
  4. root 1249 2.6 3.0 355800 30896 tty1 Rsl+ 02:02 0:02 /usr/bin/X -background none :0 vt01 -nolisten tcp
  5. root 508 2.4 1.6 248488 16776 ? Ss 02:02 0:03 /usr/bin/python /usr/sbin/firewalld --nofork
  6. silver 1525 2.1 2.3 448568 24392 ? S 02:03 0:01 /usr/bin/python /usr/share/system-config-printer/applet.py

5. 以树的形式显示进程层级

许多进程实际上是从同一个父进程fork出来的,了解父子关系通常是很有用的。"--forest" 选项会构造一个ascii艺术形式的进程层级视图。

下面的命令会用apache2的进程名来搜索并构造一个树来显示具体信息。

 
  1. $ ps -f --forest -C apache2
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 2359 1 0 09:32 ? 00:00:00 /usr/sbin/apache2 -k start
  4. www-data 4524 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
  5. www-data 4525 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
  6. www-data 4526 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
  7. www-data 4527 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start
  8. www-data 4528 2359 0 10:03 ? 00:00:00 \_ /usr/sbin/apache2 -k start

不要在排序中使用树状显示,因为两者都会以不同方式影响显示的顺序。

6. 显示父进程的子进程

下面一个是找出所有从apache进程fork出来的进程的例子。

 
  1. $ ps -o pid,uname,comm -C apache2
  2. PID USER COMMAND
  3. 2359 root apache2
  4. 4524 www-data apache2
  5. 4525 www-data apache2
  6. 4526 www-data apache2
  7. 4527 www-data apache2
  8. 4528 www-data apache2

第一个属于root的进程是apache2的主进程,其他的apache进程都是从主进程fork出来的。下面的命令使用apache2主进程的pid列出了所有的apache2的子进程。

 
  1. $ ps --ppid 2359
  2. PID TTY TIME CMD
  3. 4524 ? 00:00:00 apache2
  4. 4525 ? 00:00:00 apache2
  5. 4526 ? 00:00:00 apache2
  6. 4527 ? 00:00:00 apache2
  7. 4528 ? 00:00:00 apache2

7. 显示进程的线程

"-L"选项会随着进程一起显示线程。它可用于显示所有指定进程或者所有进程的线程。

下面的命令会显示进程id为3150的进程的所有线程。

 
  1. $ ps -p 3150 -L

8. 改变显示的列

ps命令可以被配置用来只显示被选中的列。很多列可以被用来显示,完整的列表可以查看man页。

下面的命令会只显示pid、用户名、cpu、内存、命令列。

 
  1. $ ps -e -o pid,uname,pcpu,pmem,comm

同样可以重命名列的名字。

 
  1. $ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
  2. PID USERNAME CPU_USAGE %MEM COMMAND
  3. 1 root 0.0 0.0 init
  4. 2 root 0.0 0.0 kthreadd
  5. 3 root 0.0 0.0 ksoftirqd/0
  6. 4 root 0.0 0.0 kworker/0:0
  7. 5 root 0.0 0.0 kworker/0:0H
  8. 7 root 0.0 0.0 migration/0
  9. 8 root 0.0 0.0 rcu_bh
  10. 9 root 0.0 0.0 rcuob/0
  11. 10 root 0.0 0.0 rcuob/1

非常灵活。

9. 显示进程运行的时间

运行的时间指的是,进程已经运行的时间。运行时间的列并没有默认显示,需要使用-o选项带入。

 
  1. $ ps -e -o pid,comm,etime

10. 将ps转换为实时进程查看器

通常上,watch命令可将ps命令变成实时进程查看器。像这个简单的命令

 
  1. $ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'

我桌面上的输出如下。

 
  1. Every 1.0s: ps -e -o pid,uname,cmd,pmem,pcpu --... Sun Dec 1 18:16:08 2013
  2.  
  3. PID USER CMD %MEM %CPU
  4. 3800 1000 /opt/google/chrome/chrome - 4.6 1.4
  5. 7492 1000 /opt/google/chrome/chrome - 2.7 1.4
  6. 3150 1000 /opt/google/chrome/chrome 2.7 2.5
  7. 3824 1000 /opt/google/chrome/chrome - 2.6 0.6
  8. 3936 1000 /opt/google/chrome/chrome - 2.4 1.6
  9. 2936 1000 /usr/bin/plasma-desktop 2.3 0.2
  10. 9666 1000 /opt/google/chrome/chrome - 2.1 0.8
  11. 3842 1000 /opt/google/chrome/chrome - 2.1 0.8
  12. 4739 1000 /opt/google/chrome/chrome - 1.8 1.0
  13. 3930 1000 /opt/google/chrome/chrome - 1.7 1.0
  14. 3911 1000 /opt/google/chrome/chrome - 1.6 0.6
  15. 3645 1000 /opt/google/chrome/chrome - 1.5 0.4
  16. 3677 1000 /opt/google/chrome/chrome - 1.5 0.4
  17. 3639 1000 /opt/google/chrome/chrome - 1.4 0.4

输出会每秒刷新状态,但是这其实很top不同。你会发现top/htop命令的输出相比上面的ps命令刷新得更频繁。

这是因为top输出是结合了cup使用值和内存使用值后的排序值。但是上面的ps命令是一个更简单的行为的排序,每次获取一列(像学校的数学),因此它不会像top那样快速更新。

原文发布时间为:2013-12-10

本文来自云栖社区合作伙伴“Linux中国”

转载地址:http://yyhyo.baihongyu.com/

你可能感兴趣的文章
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
1.电子商务支付方式有哪些 2.比较不同支付方式的优势劣势
查看>>
医疗卫生系统被爆漏洞,7亿公民信息泄露……
查看>>
神秘函件引发的4G+与全网通的较量
查看>>
CloudCC:智能CRM究竟能否成为下一个行业风口?
查看>>
高德开放平台推出LBS游戏行业解决方案提供专业地图平台能力支持
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
OpenStack Days China:华云数据CTO郑军分享OpenStack创新实践
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
中国人工智能学会通讯——融合经济学原理的个性化推荐 1.1 互联网经济系统的基本问题...
查看>>
盘点大数据商业智能的十大戒律
查看>>
戴尔为保护数据安全 推出新款服务器PowerEdge T30
查看>>
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>