在Linux下ps命令是用于查看系统上运行的进程的最基本的命令之一。它提供了当前进程的同时,如用户ID,CPU使用率,内存使用率,命令名称等,它不显示实时数据,如top或htop命令的详细信息。
下面的命令将列出所有的进程,可以加上管道输出给less,来滚动显示。
$ ps ax
$ ps -ef
"u"或者"-f"参数来显示所有进程的详细信息
$ ps aux
$ ps -ef -f
tips:为什么用户列不显示我的用户名,但显示其他用户,如root、www等?
对于所有的用户名(包括你)如果长度大于8个字符,然后ps将只显示UID,而不是用户名。
由进程的所属用户使用“-u”选项后跟用户名来显示。多个用户名可以提供以逗号分隔。
$ ps -f -u www-data
通过名字或命令搜索进程,使用“-C”选项后面加搜索词,比如搜索apache2。
$ ps -C apache2
$ ps aux --sort=-pcpu,+pmem
显示前5个消耗了大部分的CPU进程。
$ ps aux --sort=-pcpu | head -5
许多进程实际上是一些父进程分的分支,知道这父子进程关系往往是有用的。在'–forest'选项将建立ASCII艺术风格层次的树视图。
下面的命令将搜索进程名字为Apache2,形成一个树结构来显示详细的信息。
$ ps -f --forest -C apache2
尽量不要使用任何的排序和树风格一起展示,因为他们使用了不同的顺序。
这里有一个例子显示所有apache进程的分支
$ ps -o pid,uname,comm -C apache2
PID USER COMMAND
2359 root apache2
4524 www-data apache2
4525 www-data apache2
4526 www-data apache2
4527 www-data apache2
4528 www-data apache2
[term]
The first process that is owned by root is the main apache2 process and all other apache2 processes have been forked out of this main process. The next command lists all child apache2 processes using the pid of the main apache2 process
[term]
$ ps --ppid 2359
PID TTY TIME CMD
4524 ? 00:00:00 apache2
4525 ? 00:00:00 apache2
4526 ? 00:00:00 apache2
4527 ? 00:00:00 apache2
4528 ? 00:00:00 apache2
“-L”选项将显示进程的线程。它可以用来显示特定进程的所有线程或者所有进程。
下面的命令将显示所有id为3150的进程所拥有的线程。
$ ps -p 3150 -L
ps命令可以配置为只显示选中的列表。为了显示完整列表可以查看手册。
下面的命令只显示PID,用户名,CPU,内存和命令的列。
$ ps -e -o pid,uname,pcpu,pmem,comm
可以重命名列标签,相当的灵活。
$ ps -e -o pid,uname=USERNAME,pcpu=CPU_USAGE,pmem,comm
表示进程的运行时间。对于运行的时间,列默认情况下是不显示的,可以使用“-O”选项查看。
$ ps -e -o pid,comm,etime
像往常一样,watch命令可以用来实时捕捉ps显示进程。简单的例子如下,输出将被刷新,每1秒刷新统计数据
$ watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15'
在相比情况下top/htop命令的输出变化会更加频繁。