ps命令实用例子

ps command tutorial

最近发现,经常使用的ps命令,除了会使用一个ps aux | grep xxx来寻找之外,其他的几乎都不会,比如

  • 需要找某个nice值的所有进程
  • 需要查看某个priority值的进程的所有子线程
  • 需要找消耗cpu最高的进程

等等,发现竟然连ps命令都用不溜,且每次man ps都是一堆,看都看不仔细,想想有必要总结下常用的命令。

man手册

man ps查看ps的help手册,其内容有上百行。

命令

ps - report a snapshot of the current processes.

简介

ps是用来显示筛选的活跃进程,top是重复性的更新显示筛选的活跃进程。

注意ps -auxps aux是不一样的。在POSIX和UNIX标准中,ps -aux表示显示用户x所拥有的所有进程信息,如果刚好没有用户x,该命令才会执行ps aux的功能并给出警告。

实例

  • 查看系统中every process信息,标准语法:

    ps -e
    ps -ef
    ps -eF
    ps -ely
    
  • 查看系统中every process信息,BSD语法:

    ps ax
    ps axu
    
  • 显示进程树信息:

    ps -ejH
    ps axjf
    
  • 查看线程:

    ps -eLf
    ps axms
    
  • 查看安全信息:

    ps -eo euser,ruser,suser,fuser,f,comm,label
    ps axZ
    ps -eM
    

剩余的man手册就是每个选项的含义以及一些显示的含义,我觉得除了很细致的定位问题或者分析某个选项时参考外,其余真的没有读的动力。还不如tldr显示最常用的。

tldr ps

 - List all running processes:
   ps aux

 - List all running processes including the full command string:
   ps auxww

 - Search for a process that matches a string:
   ps aux | grep {{string}}

 - List all processes of the current user in extra full format:
   ps --user $(id -u) -F

 - List all processes of the current user as a tree:
   ps --user $(id -u) f

 - Get the parent PID of a process:
   ps -o ppid= -p {{pid}}

 - Sort processes by memory consumption:
   ps --sort size

oneliner

这里列举一些常用的实例命令,以便备用查询。其实ps的基本原理也就是通过/proc文件系统读取进程的信息并显示汇总,所以当遇到比较深入的问题时,可以直接通过/proc系统来定位。

  1. 显示所有的active进程信息

    ps -A
    ps -e
    

    ps -Aps -e效果一样,不过这两个命令只显示pid/tty/time/cmd,所以如果只需要搜索pid和cmd相关,可以用该命令。

    root@pc:~# ps -e | wc -l
    214
    root@pc:~# ps -A | wc -l
    214
    
  2. 显示某个pid进程的信息

    ps -f -p <pid>   # -f参数显示的信息较为齐全
    
  3. 显示ppid的进程信息

    ps -f --ppid <ppid>
    
  4. 显示多个pid的进程信息

    ps -fp <pid1>,<pid2>,<pid3>
    
  5. 显示指定tty的进程

    ps -t tty2
    ps -ft pts/0
    
  6. 打印进程树process tree

    ps -e --forest
    
  7. 打印指定进程的进程树信息

    ps -f --forest -C sshd
    ps -ef --forest | grep -v grep | grep sshd
    
    root@pc:~# ps -f --forest -C sshd
    UID          PID    PPID  C STIME TTY          TIME CMD
    root         679       1  0 8月26 ?       00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of
    root        4653     679  0 8月26 ?       00:00:00  \_ sshd: root@pts/0
    root@pc:~# ps -ef --forest | grep -v grep | grep sshd
    root         679       1  0 8月26 ?       00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
    root        4653     679  0 8月26 ?       00:00:00  \_ sshd: root@pts/0
    
  8. 显示线程信息

    • 只显示进程信息
    ps H
    
    • -L参数可以显示线程LWP信息以及NLWP(number of lightweight processes)。
    [root@pc:~#] ps -fL -C sshd
    UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
    root      2026     1  2026  0    1 Aug23 ?        00:00:00 /usr/sbin/sshd -D
    root     28666  2026 28666  0    1 Aug26 ?        00:00:02 sshd: root@pts/4
    root     28678  2026 28678  0    1 Aug26 ?        00:00:00 sshd: root@notty
    root     28737  2026 28737  0    1 Aug26 ?        00:00:01 sshd: root@pts/5
    root     28785  2026 28785  0    1 Aug26 ?        00:00:00 sshd: root@notty
    
  9. 按照指定格式输出信息

    ps L 	#列出所有的format格式字段
    ps -eo pid,ppid,user,cmd	#显示所有的进程,并且显示ppid,pid,user,cmd
    

    比如显示指定pid进程的格式化输出信息

    [root@pc:~#] ps -p 2026 -o pid,ppid,ni,pri,fgroup,lstart,etime,cmd
      PID  PPID  NI PRI FGROUP                    STARTED     ELAPSED CMD
     2026     1   0  19 root     Tue Aug 23 21:42:37 2022  4-03:49:36 /usr/sbin/sshd -D
    

    比如按照cmd命令行来过滤显示某指定进程

    [root@pc:~#] ps -o pid,ppid,ni,pri,fgroup,lstart,etime,cmd -C ssh
      PID  PPID  NI PRI FGROUP                    STARTED     ELAPSED CMD
    31764 28689   0  19 root     Fri Aug 26 05:21:27 2022  1-20:14:38 ssh localhost -p 19888
    

    比如通过pid查找某个进程的cmd

    [root@pc:~#] ps -p 31764 -o comm=
    ssh
    
  10. 显示父子进程信息

    • 按照进程名来过滤显示ps -C <xxx>

      ps -C <xxx>
      #比如显示sshd进程
      [root@pc:~#] ps -C sshd
        PID TTY          TIME CMD
       2026 ?        00:00:00 sshd
      28666 ?        00:00:02 sshd
      28678 ?        00:00:00 sshd
      28737 ?        00:00:01 sshd
      28785 ?        00:00:00 sshd
      
    • 过滤某个进程名的所有instance的pid,脚本文件里常用啦过滤

      ps -C sshd -o pid=
      
      [root@pc:~#] ps -C sshd -o pid=
       2026
      28666
      28678
      28737
      28785
      
    • 显示进程的已执行时间,比如过滤sshd相关进程的已执行时间

      ps -eo comm,etime,user | grep sshd
      
      [root@pc:~#]  ps -eo comm,etime,user | grep sshd
      sshd             4-04:03:29 root
      sshd             1-21:04:06 root
      sshd             1-21:03:56 root
      sshd             1-21:03:55 root
      sshd             1-21:03:45 root
      
  11. 通过ps来排查性能问题

    • 显示CPU使用率最高的进程

      ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
      

      比如过滤显示CPU使用率最高的几个进程信息

      [root@pc:~#] ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
        PID  PPID CMD                         %MEM %CPU
      31721 31720 /home/rg/project/qemu-5.1.0  4.8  197
       4142     1 /home/rg/project/qemu-5.1.0  5.2  1.5
       1595     1 /usr/sbin/NetworkManager --  0.0  0.1
       3252  3053 /usr/bin/gnome-shell         0.3  0.1
          1     0 /usr/lib/systemd/systemd --  0.0  0.0
          2     0 [kthreadd]                   0.0  0.0
          3     2 [rcu_gp]                     0.0  0.0
          4     2 [rcu_par_gp]                 0.0  0.0
          5     2 [kworker/0:0-rcu]            0.0  0.0
      
    • 比如显示内存使用率最高的进程信息

      [root@pc:~#] ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
        PID  PPID CMD                         %MEM %CPU
       4142     1 /home/rg/project/qemu-5.1.0  5.2  1.5
      31721 31720 /home/rg/project/qemu-5.1.0  4.8  197
       3252  3053 /usr/bin/gnome-shell         0.3  0.1
       3672  3053 /usr/bin/gnome-software --g  0.1  0.0
       2578  2038 /usr/bin/X :0 -background n  0.0  0.0
       3902     1 /usr/libexec/gnome-terminal  0.0  0.0
       3607  3053 nautilus-desktop --force     0.0  0.0
       3419     1 /usr/libexec/goa-daemon      0.0  0.0
       2029     1 /usr/sbin/libvirtd           0.0  0.0
      
    • 结合watch命令实时观察

      # 比如每隔1s观察CPU使用率最高的信息
      watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head'
      
  12. 只显示当前用户的所有的进程信息

    ps x
    
  13. 显示virtual memory使用情况,%mem就是内存使用情况

    [root@pc:~#] ps v
      PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
     2578 tty1     Ssl+   0:43    163  2284 515819 95956  0.0 /usr/bin/X :0 -background none -no
     3989 pts/0    S      0:00      3    24 232211 7596  0.0 su
     3997 pts/0    S+     0:01      0   885 116050 5056  0.0 bash
     4142 pts/0    Sl    96:35     62 11676 30521299 6078572  6.1 /home/rg/project/qemu-5.1.0/bu
    19206 pts/5    R+     0:00      0    90 153245 3720  0.0 ps v
    28689 pts/4    Ss     0:00      0   885 115934 4900  0.0 -bash
    28796 pts/5    Ss     0:00      0   885 115834 4648  0.0 -bash
    31720 pts/4    S      0:00      0   885 112410 2652  0.0 /bin/sh ./init.sh
    31721 pts/4    Sl   5270:34     0 11676 13416995 4795852  4.8 /home/rg/project/qemu-5.1.0/bu
    31764 pts/4    S+     0:00      0   727 178164 7076  0.0 ssh localhost -p 19888
    43015 pts/1    S      0:00      0    24 232211 7624  0.0 su
    43026 pts/1    S+     0:00      0   885 115858 4912  0.0 bash
    45222 pts/2    S      0:00      0    24 232211 8000  0.0 su
    45233 pts/2    S+     0:00      0   885 115858 4608  0.0 bash
    
  14. 隐藏ps输出的首行header

    ps h
    

reference

30个ps实用例子

Linux中25个ps实例

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值