ps命令是Unix/Linux内建的实用程序,用它能查看当前系统正在运行的进程的相关信息。
ps命令从/proc文件系统中的虚拟文件中读取相关信息,它是系统管理中最重要的功能,特别是在进程监控方面,它能帮助你了解Linux系统当前正发生了什么。
ps命令具有操作其输出的众多参数,但在我们的日常管理中只会用到其中很小的部分。
在这篇教程中,我们将用30个常用例子来列举ps命令对Linux进程的监视。
一、列出当前Shell中的所有进程
1. 如果您运行ps命令没有带任何参数,它将显示当前shell的所有进程。
$ ps
List Current Running Processes
二、以不同的风格显示所有进程
ps命令带有2种不一样的风格,分别是BSD和UNIX。新用户经常会混淆和错误地解释这两种风格。所以要弄清楚他们,继续操作之前这里是一些基本的信息。
注意:"ps aux"和"ps -aux"不相同。例如"-u"用来显示该用户的进程。但是"u"则是显示详细的信息。
2. UNIX/LINUX的风格:在linux风格的语法选项前面有一个破折号“-”如下:
$ ps -A
OR
$ ps -e
List Processes in Standard Format
3. BSD风格:在BSD风格的语法选项前不带连字符,如下:
$ ps au
OR
$ ps axu
List Processes in BSD Format
4. 要以全格式列表显示所有进程,请添加-f或-F标志。
$ ps -ef
OR
$ ps -eF
List Processes in Long List Format
三、显示用户运行进程
5. 你可以查询你拥有的所有进程(运行ps命令的权限,在本例中为root),输入:
$ ps -x
6. 使用-U参数显示指定用户名(RUID)或用户ID的进程:
$ ps -fU servicelabs
OR
$ ps -fu 1001
List User Processes by ID
7. 使用-u参数显示指定用户名(EUID)或用户ID的进程:
$ ps -fu tecmint
OR
$ ps -fu 1000
四、显示作为根用户运行的所有进程
8. 以下命令允许您以用户格式查看以root用户权限(实际和有效ID)运行的每个进程:
$ ps -U root -u root
Display Root User Running Processes
五、显示组进程
9. 如果要列出某个组拥有的所有进程(实际组ID(RGID)或名称)),请输入:
$ ps -fG www-data
OR
$ ps -fG 33
Display Group Processes
10. 如果要列出有效组名称(或会话)所拥有的所有进程,请输入:
$ ps -fg www-data
六、通过PID和PPID显示进程
11. 你可以通过进程ID来显示所属的进程,如下显示进程ID为1178的进程:
$ ps -fp 1239
List Processes by PID
12. 以父进程ID来显示其下所有的进程,如显示父进程为1154的所有进程:
$ ps -f --ppid 1244
List Process by PPID
13. 显示指定PID的多个进程:
$ ps -fp 1204,1239,1263
List Processes by PIDs
七、通过所属TTY来显示进程
14. 要按tty显示所属进程,可使用-t参数,如下所示。
$ ps -t pst/0
$ ps -t pst/1
$ ps -ft tty1
List Processes by TTY
八、树形显示进程
15. 以进程树显示系统中的进程如何相互链接。
$ ps -e --forest
List Process Tree
16. 以进程树显示指定的进程
$ ps -f --forest -C sshd
OR
$ ps -ef --forest | grep -v grep | grep sshd
List Tree View of Process
九、根据线程来显示进程
17. 要显示一个进程的所有线程,请使用-H参数,这将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列。
$ ps -fL -C nginx
List Process Threads
十、指定自定义输出格式
使用-o或-format选项,ps允许您构建用户定义的输出格式,如下所示:
18. 要列出所有格式说明符,请包括L标志。
$ ps L
19. 以下命令允许您查看进程的PID,PPID,用户名和命令:
$ ps -eo pid,ppid,user,cmd
List Processes with Names
20. 下面是一个自定义输出格式的示例,显示文件系统组,ni值,开始时间和进程的时间:
$ ps -p 1154 -o pid,ppid,fgroup,ni,lstart,etime
List Process ID Information
21. 使用其PID查找进程名称:
$ ps -p 1244 -o comm=
Find Process using PID
十一、显示父进程和子进程
22. 要以其名称选择特定进程,请使用-C参数,这也将显示其所有子进程。
$ ps -C sshd
Find Parent Child Process
23. 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用,如下列:
$ ps -C nginx -o pid=
Find All Process PIDs
24. 检查一个进程的执行时间。
$ ps -eo comm,etime,user | grep nginx
以下输出显示nginx服务已运行45分37秒:
Find Process Uptime
十二、Linux系统性能和故障排除
如果你的系统不能正常工作,例如,如果速度异常慢,你可以执行以下命令来排除系统故障:
26. 查找占用最多内存和CPU的进程
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
OR
$ ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
Find Top Running Processes
27. 终结耗费高CPU时间或者没有反应的进程:
首先,找到无响应的进程或进程的PID。
$ ps -A | grep -i stress
然后用kill命令立刻终结指定的PID:
$ kill -9 1244 1246 1247 1248 1249
Find and Kill a Process
十三、显示安全信息
28. 显示安全信息:
$ ps -eM
OR
$ ps --context
Find SELinux Context
29. 你也可以使用以下命令以用户定义的格式显示安全信息。
$ ps -eo euser,ruser,suser,fuser,f,comm,label
List SELinux Context by Users
十四、使用Watch应用程序对进程实时监控
30. 最后,因为ps显示的是静态的信息,你可以使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视:
$ watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
Real Time Process Monitoring
注意:本文归作者所有,未经作者允许,不得转载