Linux 系统中 ps 命令是 Process Status 的缩写,用来列出系统中当前运行的进程。ps 列出的是当前那些进程的快照,就是执行 ps 命令的那个时刻的那些进程,如果想要动态的显示进程信息,可以使用 top 命令;
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是查看当前进程,而 ps 命令就是最进本的同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的;
ps 为我们提供了进程的一次性查看,它所提供的查看结果并不是动态连续的;如果想要对进程时间监控,应该使用 top 命令;
kill 用于杀死进程;
linux上进程的5种状态
ps工具标识进程的5种状态码
命令格式 - ps [参数]
命令功能 - 用来显示当前进程的状态
命令参数 -
命令实例 -
实例一:显示所有进程信息
命令
xxxxxxxxxx11ps -A输出
xxxxxxxxxx101Qs-MacBook-Pro:dir4 qiu$ ps -A2  PID TTY           TIME CMD3    1 ??         6:07.63 /sbin/launchd4   40 ??         0:04.77 /usr/sbin/syslogd5   41 ??         0:12.18 /usr/libexec/UserEventAgent (System)6   43 ??         0:44.81 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTPro7   45 ??         0:03.63 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld8   46 ??         0:03.83 /usr/libexec/kextd910···说明
实例二:显示指定用户信息
命令
xxxxxxxxxx11ps -u root输出
xxxxxxxxxx91Qs-MacBook-Pro:dir4 qiu$ ps -u root2  UID   PID TTY           TIME CMD3    0     1 ??         6:07.91 /sbin/launchd4    0    40 ??         0:04.77 /usr/sbin/syslogd5    0    41 ??         0:12.19 /usr/libexec/UserEventAgent (System)6    0    43 ??         0:44.81 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns7    0    45 ??         0:03.64 /System/Library/Pri89···说明
实例三:显示所有进程信息,连同命令行
命令
xxxxxxxxxx11ps -ef输出
xxxxxxxxxx91Qs-MacBook-Pro:dir4 qiu$ ps -ef2  UID   PID  PPID   C STIME   TTY           TIME CMD3    0     1     0   0 二01下午 ??         6:08.21 /sbin/launchd4    0    40     1   0 二01下午 ??         0:04.77 /usr/sbin/syslogd5    0    41     1   0 二01下午 ??         0:12.20 /usr/libexec/UserEventAgent (System)6    0    43     1   0 二01下午 ??         0:44.83 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTProtectionDaemon.app/Contents/MacOS/RTProtectionDaemon -i Malwarebytes-Mac-3.7.34.2263.pkg7    0    45     1   0 二01下午 ??         0:03.64 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld89···说明
实例四:ps 与 grep 常用组合用法,查找特定进程
命令
xxxxxxxxxx11ps -ef|grep ssh输出
xxxxxxxxxx51Qs-MacBook-Pro:dir4 qiu$ ps -ef|grep ssh2  501 29027     1   0 11:16上午 ??         0:00.03 /usr/bin/ssh-agent -l3  501 29877 27147   0 11:38上午 ttys003    0:00.00 grep --color=auto ssh4Qs-MacBook-Pro:dir4 qiu$ 5说明
实例五:将目前属于您自己的这次登录的 PID 与相关信息列示出来
命令
xxxxxxxxxx11ps -l输出
xxxxxxxxxx91Qs-MacBook-Pro:dir4 qiu$ ps -l2  UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD3  501 26860 26859     4006   0  31  0  4325196   3300 -      S+                  0 ttys000    0:00.06 -bash4  501 26871 26863     4006   0  31  0  4325196   3432 -      S+                  0 ttys001    0:00.06 -bash5  501 27099 27072     4006   0  31  0  4317004   3140 -      S+                  0 ttys002    0:00.06 -bash6  501 27147 27111     4006   0  31  0  4325196   3212 -      S                   0 ttys003    0:00.08 -bash7  501 28042 27797     4006   0  31  0  4333388   3452 -      S+                  0 ttys005    0:00.06 -bash8Qs-MacBook-Pro:dir4 qiu$ 9说明
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。
实例六:列出目前所有正在内存当中的程序
命令
xxxxxxxxxx11ps aux输出
xxxxxxxxxx81Qs-MacBook-Pro:dir4 qiu$ ps aux2USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND3_coreaudiod        169  10.2  0.1  4394448  14684   ??  Ss   二01下午  86:56.72 /usr/sbin/coreaudiod4qiu              26460   4.7  5.5 11396980 914844   ??  S    11:15上午   3:41.15 /Applications/WebStorm.app/Co5_windowserver    26418   4.0  0.9  7096432 147456   ??  Ss   11:15上午   2:55.26 /System/Library/PrivateFramew6qiu              26582   3.8  1.3  5078668 212736   ??  S    11:16上午   0:53.71 /Applications/Google Chrome.a78···说明
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
实例七:日出列示程序树的程序显示
命令
xxxxxxxxxx11ps -axjf输出
xxxxxxxxxx91Qs-MacBook-Pro:dir4 qiu$ ps -axjf2USER               PID  PPID  PGID   SESS JOBC STAT   TT       TIME COMMAND            UID   C STIME   TTY3root                 1     0     1      0    0 Ss     ??    6:09.74 /sbin/launchd        0   0 二01下午 ??      4root                40     1    40      0    0 Ss     ??    0:04.78 /usr/sbin/syslog     0   0 二01下午 ??      5root                41     1    41      0    0 Ss     ??    0:12.26 /usr/libexec/Use     0   0 二01下午 ??      6root                43     1    43      0    0 S<s    ??    0:44.95 /Library/Applica     0   0 二01下午 ??      7root                45     1    45      0    0 Ss     ??    0:03.65 /System/Library/     0   0 二01下午 ??      89···说明
实例八:找出与 cron 与 syslog 这两个服务有关的 PID 号码
命令
xxxxxxxxxx11ps aux | egrep '(cron|syslog)'输出
xxxxxxxxxx41Qs-MacBook-Pro:dir4 qiu$ ps aux | egrep '(cron|syslog)'2root                40   0.0  0.0  4351396    956   ??  Ss   二01下午   0:04.79 /usr/sbin/syslogd3qiu              29885   0.0  0.0  4258736    176 s003  S+   11:43上午   0:00.00 egrep --color=auto (cron|syslog)4说明
其他实例:
可以用 | 管道和 more 里连接起来分页查看
xxxxxxxxxx11ps -aux | more把所有进程显示出来,并输出到 ps001.txt 文件
xxxxxxxxxx11ps -aux > ps001.txt输出指定的字段
x
1ps -o pid,ppid,pgrp,session,tpgid,commxxxxxxxxxx11[root@localhost test6]# ps -o pid,ppid,pgrp,session,tpgid,comm2  PID  PPID  PGRP  SESS TPGID COMMAND317398 17394 17398 17398 17478 bash417478 17398 17478 17398 17478 ps5[root@localhost test6]#