学而实习之 不亦乐乎

Linux:PS命令使用详解

2020-08-19 19:29:11

Linux中要查看进程的情况,可以使用ps命令,ps命令是最基本进程查看命令。使用ps命令可以查看有哪些进程正在运行及运行的状态,如:进程是否结束、有没有僵尸进程、进程占用资源的情况等等。

一、ps命令

ps是显示瞬间进程的状态,并不动态连续;如果想对进程进行实时监控应该用top命令。

ps 命令的参数
参数:
-A :所有的进程均显示出来,与 -e 具有同样的效用;
-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;
x :通常与 a 这个参数一起使用,可列出较完整信息。

输出格式规划:
l :较长、较详细的将该PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一个更为完整的输出。

注意:
由于 ps 命令支持的系统类型比较多,所以为了适应多种系统,它的参数也比较多,而且加不加横杠(-),意义也是不一样的!(关于命令参数请参照 >> man ps 命令)

ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不同的 Linux 发行版上,ps 命令的语法各不相同,为此,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps  命令的用户。

二、ps 命令输出信息的含义

1.将目前属于您自己这次登入的 PID 与相关信息列示出来

>>ps -l

各相关信息的意义为:
F 代表进程的标志 (process flag),说明这个进程的权限,常见号码有: 
    4 表示进程的权限为root;
    1 表示此子进程仅可进行复制(fork)而无法实际执行(exec)

S 代表这个进程的状态 (STAT),主要的状态有:
    -D: 无法中断的休眠状态 (通常 IO 的进程)
    -R :该程序目前正在运作,或者是可被运作;
    -S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。
    -T :该程序目前正在侦测或者是停止了;
    -Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
    -W: 没有足够的记忆体分页可分配
    -X:死掉的进程(应该不会出现)。
    -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
    -<: 高优先序的行程
    -N: 低优先序的行程
    -L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    -s:包含子进程。
    -l:多线程(小写 L)。
    -+:位于后台。
UID 代表执行者身份
PID 进程的ID号!
PPID 父进程的ID;
C CPU使用的资源百分比
PRI 指进程的执行优先权(Priority的简写),其值越小越早被执行;
NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个运行中(running)的程序,一般就是"-"。
SZ 使用掉的内存大小。
WCHAN 目前这个程序是否正在运作当中,若为"-"表示正在运作;
TTY 登入者的终端机位置,若为远程登录则使用动态终端接口(pts/n)
TIME 使用掉的 CPU 时间。
CMD 执行的命令名称
1:进程可以被复制,但是不能被执行;
4:进程使用超级用户权限;

2.列出目前所有的正在内存当中的程序

>>ps aux

USER:该进程属于那个使用者账号。
PID :该进程的进程ID号。
%CPU:该进程使用掉的 CPU 资源百分比;
%MEM:该进程所占用的物理内存百分比;
VSZ :该进程使用掉的虚拟内存量 (Kbytes)
RSS :该进程占用的固定的内存量 (Kbytes)
TTY :该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 ,则表示为由网络连接进主机的程序。(其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。)
STAT:该程序目前的状态,主要的状态同 ps -l 命令中的 S (见上面):
    -D: 无法中断的休眠状态 (通常 IO 的进程)
    -R :该程序目前正在运作,或者是可被运作;
    -S :该程序目前正在睡眠当中,但可被某些讯号(signal) 唤醒。
    -T :该程序目前正在侦测或者是停止了;
    -Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
    -W: 没有足够的记忆体分页可分配
    -X:死掉的进程(应该不会出现)。
    -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
    -<: 高优先序的行程
    -N: 低优先序的行程
    -L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    -s:包含子进程。
    -l:多线程(小写 L)。
    -+:位于后台。
START:该进程被触发启动的时间;
TIME :该进程实际使用 CPU 运作的时间。
COMMAND:该程序的实际命令。

三、关于僵尸进程

我们再来说说僵尸进程。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。
僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。
如果你发现某个进程的<CMD>后面有<defunct>时,就表示该进程是僵尸进程

四、其他实例

>>> ps -lA
与 ps -l 显示的内容相同,但会显示出所有的进程。

>>> ps axjf
列出类似进程树的程序显示(也可以使用pstree)。

>>> ps aux | egrep '(cron|syslog)'
找出与cron和syslog这两个服务有关的PID号