Linux学习之基础知识——进程管理(ps与pstree)

时间:2024-04-02 13:11:43

概述

系统要处理特定的任务需要运行特定的程序,而程序只是系统中的一个静态的文件,当运行某个程序时,实际上是运行运行这个程序的副本,创建了一个进程,进程的运行是一个动态的过程。要使系统健康的运行,就必须了解系统中各项程序的运行状况,并对异常运行的进程进行处理,保持系统的可用性。这里主要介绍ps、pstree命令,来完成进程的查看工作,后续会介绍top、vmstat、dstat以及kill命令完成对进程的管理。

ps

process state,显示当前时刻系统进程的快照。系统各进程的相关数据都保存在/proc/PID目录下的各文件中。

Linux学习之基础知识——进程管理(ps与pstree)

                选项有三种风格:
                   1   UNIX options, which may be grouped and must be preceded by a dash.
                   2   BSD options, which may be grouped and must not be used with a dash.
                   3   GNU long options, which are preceded by two dashes.            
                    Unix风格:必须使用-
                    BSD风格:不能使用-
                    GNU风格:使用--

                启动进程的方式:
                    系统启动过程中自启动:与终端无关的进程;
                    用户通过终端启动:与终端相关的进程;

                选项:
                    a:所有与终端相关的进程;
                    x:所有与终端无关的进程;
                    u:以用户为中心组织进程状态信息显示;
                    f: 选项显示进程树,相当于 --forest
                    k|--sort 属性  对属性排序,属性前加 - 表示倒序
                    o: 属性...定制显示的属性,pid、cmd、%cpu、%men
                    L: 显示支持的属性列表
                常见选项:
                    -C cmdlist 指定命令,多个命令用,分隔;查看脚本时若脚本用bash运行或者没有写#!/bin/bash
                        则不会显示
                    -L 显示线程
                    -e: 显示所有进程,相当于-A
                    -f: 显示完整格式程序信息
                    -F: 显示更完整格式的进程信息
                    -H: 以进程层级格式显示进程相关信息
                    -u userlist 指定有效的用户ID或名称
                    -U userlist 指定真正的用户ID或名称
                    -g gid或groupname 指定有效的gid或组名称
                    -G gid或groupname 指定真正的gid或组名称
                    -p pid 显示指pid的进程
                    --ppid pid 显示属于pid的子进程
                    -M 显示SELinux信息,相当于Z

                常用组合之一:ps aux
                例如:
                    ]# ps a:显示所有与终端相关的进程;
                    ]# ps x:显示所有与终端无关的进程;
                    ]#  ps aux

                    显示字段表示含义:
                        USER:启动进程的用户;
                        PID:进程号;默认以PID排序;
                        %CPU:累计占用cpu的比率;
                        %MEM:内存空间占用比率;
                        VSZ:占用虚拟内存集的大小;
                            虚拟内存空间中数据的空间叫页面page,每个页面都映射到物理内存中的可用页框page frame,且是不连续的;操作系统中可有共享库,多个进程可使用共享库,在内存中只存一份即可;
                            比如进程1虚拟内存空间中有5个页面,其中2个是使用的共享库的数据;
                            进程2虚拟内存空间中有4个页面,其中2个是使用共享库的数据;
                            那么,事实上,它们真正占用的空间是不包括共享库的,进程1占用为3个内存页框,进程2占用为2个内存页框;

                        RSS:Resident Size常驻内存集;
                            内存空间分两类:物理内存和交换内存,当物理内存不够用是,可把一些数据放在交换内存上,但有些数据是不能放在交换内存中的就叫常驻内存集;

                        TTY:?表示不知道终端是什么;如果知道就显示终端名称;
                        STAT:当前进程的状态;(BSD风格)
                            R:running,运行态;
                            S:interruptable sleeping,可中断睡眠;
                            D:uninterruptable sleeping,不可中断睡眠;
                            T:Stopped,停止态;
                            Z:zombie,僵死态;

                            +:前台进程,运行在终端上,占用命令行;
                            l:多线程进程;
                            N:低优先级进程;
                            <:高优先级进程;
                            s:session leader,会话进程首进程(会话(子进程)发起者);
                        START:启动时间;
                        TIME:cpu累计运行时间;
                        COMMAND:有中括号的表示内核线程;

                -e:显示所有进程;
                -f:显示完整信息;

                    例如:
                        ]# ps -e:可显示字段为PID、TTY、TIME、CMD;
                        ]# ps -ef:可显示字段为UID、PID、PPID、C、STIME、TTY、TIME、CMD;
                            PPID为父进程的进程号;
                            C:cpu占用百分比,cpu utilization;
                            STIME:启动时间;
                            TTY:与终端相关;
                            TIME:累计运行时间;
                            CMD:启动进程的命令;

                常用组合之二:ps -ef

                -F:显示完成格式的进程信息;

                    例如:
                        ]# ps -eF:可显示字段有:UID、PID、PPID、C、SZ、RSS、PSR、ST、STIME、TTY、TIME、CMD
                            PSR:进程运行在哪颗cpu上;

                -H:以层级结构显示进程的相关信息(显示进程及子进程);

                    例如:
                        ]# ps -eFH:查看所有进程,完成格式,以层级结构显示;

                常用组合之三:ps -eFH
                -o field1,field2,...:自定义要显示的字段列表,以逗号分隔;
                    常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
                        ni:ncie值;-20到19
                        priority:priority,优先级;
                        rtprio:实时优先级;
                        psr:进程运行在哪颗cpu上;
                        pcpu:cpu的利用率;
                        ppid:父进程的进程号;

                常用组合之四:o一定要写在后面,因为后面要带参数;
                    ps -eo
                    ps axo

                        例如:
                            ]# ps axo pid,comm:查看pid,comm两字段,所有与终端相关,与终端无关的进程;
                ps格式的显示:
                   CODE   NORMAL   HEADER
                   %C     pcpu     %CPU
                   %G     group    GROUP
                   %P     ppid     PPID
                   %U     user     USER
                   %a     args     COMMAND
                   %c     comm     COMMAND
                   %g     rgroup   RGROUP
                   %n     nice     NI
                   %p     pid      PID
                   %r     pgid     PGID
                   %t     etime    ELAPSED
                   %u     ruser    RUSER
                   %x     time     TIME
                   %y     tty      TTY
                   %z     vsz      VSZ

pstree

pstree以树状图的形式展现进程以及进程间的关系,是查看所有进程比较直观的方法。

pstree命令:
    display a tree of processes
            选项:
            -a     显示进程的详细信息,包括路径、参数等
            -l  采用长列格式显示树状图;
            -n  用程序识别码排序。预设是以程序名称来排序;
            -p  显示程序识别码;
            -u  显示用户名称
            -p     显示进程号

pstree 命令的各选项也是可以组合运用的。


pstree

Linux学习之基础知识——进程管理(ps与pstree)

pstree -aLinux学习之基础知识——进程管理(ps与pstree)

pstree -npl

Linux学习之基础知识——进程管理(ps与pstree)