Linux的进程管理

进程:简单来说就是一个运行中的程序的副本,是进程的一个实例,它是有生命周期的

进程的创建:进程都是由其父进程创建的,最开始的进程就是init

进程优先级:0-139

实时优先级:1-99

静态优先级:100-139,对于静态来说数字越小优先级越高,

    优先级还有一个Nice值,值为-20(对应100),19(对应19),可以通过调整Nice值来调整优先级。

进程分为守护进程和前台进程,守护进程就是在系统引导过程中启动的进程,跟终端无关的进程;前台进程跟终端有关,通过终端启动的进程。(也可以把前台进程送往后台以守护进程运行)

  进程状态:

    运行状态:running

    就绪态:ready

    睡眠态:有分为可中断interruptablesleeping;不可中断uninterruptable sleeping

    停止态:stopped,暂停于内存中,但不会被调度,除非手动启动之

    僵死态:zombie

Linux中进程查看及管理的工具有pstree pstophtopglancesdstatvmstat

Linux系统各进程的相关信息都保存在/proc/PID目录下的各文件中,各种查看工具也是读取这里面的信息,显示为我们更好理解的信息

(1)      pstree命令:查看进程树的

CentOS6的显示结果,可以看到init是最开始是的进程

CentOS7中查看的如下,不是init了而是systemd

 

(2)      ps命令:查看进程的运行状态信息等,还是一个相当强大的命令

支持两种风格,带‘-’和不带‘-’的

  参数:

    -a:与终端相关的进程

    -e:显示所有进程

    -f:显示完整格式程序信息

    -u:以用户为中心组织进程状态的信息显示

    -x:与终端无关的进程

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

    -H:以进程层级格式显示进程相关信息

    常用组合:-aux-ef-eFH-axo

  还可以使用-eo{pid, tid,class,rtprio,ni,pri,psr,pcpu,stat,comm}                          axo{stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm}

显示自己指定需要的信息;niNice值,pri:优先级,rtprio:实时优先级

  ps  -aux显示的信息有以下几列

    USER:用户名;PID:进程号;%CPUCPU利用率;%MEM:内存使用率;

    VSZVirtual  memory Size,虚拟内存集(虚拟地址大小);RSSReSident Size,常驻内存集(物理内存大小);TTY:是否与终端有关,?表示无关

    STAT:进程状态

        RrunningSinterruptable  sleepingDuninterruptablesleeping

          TstoppedZzombie(父进程会替子进程收尸);x:死亡状态

          +:前台进程;l:多线程进程;N:低优先级进程;<:高优先级进程;

       ssession leader,某一个会话的leader进程

    START:开始时间

    TIME:用掉用的CPU时间

    COMMAND:所执行的命令

    

ps –ef

(3)      pgrep:完成进程管理信息的过滤;pkill:杀死进程的;

    两个命令的用法格式相近,放在一块说明

   语法格式:pgrep [options]pattern(用户名);pkill [options] pattern

     参数:

    -u uid:effective user 有效用户ID

     -U uid: real user    实际的用户ID

     -t terminal: 与指定终端相关的进程

     -l: 显示进程名,

     -a: 显示完整格式的进程名

     -P pid: 显示其父进程为此处指定的进程的进程列表

pgrep  – u root –l

(4)      pidof:根据进程名获取进程的ID

以上命令显示的都是进程的静态信息

下面是显示进程动态信息的命令

(5)      top:动态刷新显示进程的信息,是一个交互式的进程状态实时查看工具

  默认排序是CPU的利用率

    排序:

       P:以占据的CPU百分比;

       M:占据内存百分比;

           T:累积占据CPU时长;

    首部信息显示:

        uptime信息:l命令(显示或不显示)

        tasks(进程树)及cpu信息:t命令

        cpu分别显示:1 (数字)

        memory信息:m命令

        退出命令:q

        修改刷新时间间隔:s

        终止指定进程:k

    选项:

       d #: 指定刷新时间间隔,默认为3秒;

       -b: 以批次方式;

       -n #: 显示多少批次;

                                    

                           

(6)      htop:是基于文本模式的、交互式的进程查看器,主要用于控制台或shell中,是top的高级版

这个工具在系统中一般不是默认安装的,需要自己进行安装,使用yum进行安装就可以了(如果不会看本人以前的博客,或网上搜索下)

常用选项:

F1 : 查看htop使用说明;F2 : 设置;F3 : 搜索进程;F4 : 过滤器,按关键字搜索;      

F5 : 显示树形结构;F6 : 选择排序方式;F7 : 减少nice值,这样就可以提高对应进程的优先级;     F8 : 增加nice值,这样可以降低对应进程的优先级;F9 : 杀掉选中的进程;F10 : 退出htop或者q退出;

搜索选项:

    l :显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件;  

    u :显示所有用户,并可以选择某一特定用户的进程;      

    s : 将调用strace追踪进程的系统调用;        

    t : 显示树形结构;        

    H :显示/隐藏用户线程;       

    I :倒转排序顺序;       

    K :显示/隐藏内核线程;           

    M :按内存占用排序;       

    P :按CPU排序;          

    T :按运行时间排序;        

    上下键或PgUP, PgDn : 移动选中进程;       

    左右键或Home, End : 移动列表;       

    Space(空格) : 标记/取消标记一个进程;

命令可以作用于多个进程

使用时,直接htop回车就可以了

F2可以设置要显示信息内容

    -d #: 指定延迟时间;

    -u UserName: 仅显示指定用户的进程;

     -s COLOMN: 以指定字段进行排序;

  命令:

    s:跟踪选定进程的系统调用;

  

    l:显示选定进程打开的文件列表;

        a:将选定的进程绑定至某指定CPU核心;

        t:显示进程树

    

    

(7)      vmstat命令:对操作系统的虚拟内存、进程、CPU活动进行监控,它对系统的整体情况进行统计  命令使用格式:

    vmstat [options] [delay [count]]

         选项:-s:显示内存的统计数据

显示的信息的解释:

procs:

 r:等待运行的进程的个数;

 b:处于不可中断睡眠态的进程个数;(被阻塞的队列的长度)

memory

 swpd: 交换内存的使用总量;

 free:空闲物理内存总量;

 buffer:用于buffer的内存总量;

 cache:用于cache的内存总量;

swap:

 si:数据进入swap中的数据速率(kb/s)

 so:数据离开swap中的数据速率(kb/s)

io

 bi:从块设备读入数据到系统的速率;(kb/s)

 bo: 保存数据至块设备的速率;

system

 in: interrupts, 中断速率;

 cs: context switch, 进程切换速率;

cpu

 us:用户进程执行时间(user time)

 sy:系统进程执行时间(system time)

 id:空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。

 wa:等待IO时间

(8)      pmap命令:显示一个进程的内存映射

           语法格式:

pmap [options] pid [...]

              -x: 显示详细格式的信息;

           pmap查看的信息,可以通过另外一种方法实现:

                 #cat /proc/PID/maps

(9)      glances命令:在用户的终端上实时动态的显示重要的系统数据和变化。显示的数据包括:CPU、内存、磁盘、网络等使用情况,内核、运行队列、负载、I/O 状态、消耗资源最多的进程等等

    Glances 可以单机使用,也可以客户端-服务器模式多机使用。单机使用很简单,直接运行就可以了:

    客户端-服务器模式稍微复杂一点,需要在一台机器上以服务器模式启动 glances -s,另外一台机器以客户端模式连接 glances -c. 比如在有两台机器 A 和 B 都装了 glances,要想在 A 上看 B 上的 glances 的话需要事先在 B 上用服务器模式启动 glances(假设 B 的 IP 地址是 172.16.100.18):

    # glances -s

然后再从 A(客户端)用 Glances 访问 B(服务器):

    # glances -c 172.16.100.18

glances命令格式:

    glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

 常用的选项:

    -b: Byte为单位显示网卡数据速率;

    -d: 关闭磁盘I/O模块;

    -f/path/to/somefile: 设定输入文件位置;

    -o{HTML|CSV}:输出格式;

    -m: 禁用mount模块

    -n: 禁用网络模块

    -t #: 延迟时间间隔

    -1:每个CPU的相关数据单独显示;

    

glances

其中显示的字段的意义如下:

    VIRT: 虚拟内存大小

    RES: 进程占用的物理内存值
    %CPU:该进程占用的 CPU 使用率
    %MEM:该进程占用的物理内存和总内存的百分比
    PID: 进程 ID 号
    USER: 进程所有者的用户名
    TIME+: 该进程启动后占用的总的 CPU 时间
    IO_R 和 IO_W: 进程的读写 I/O 速率
    NAME: 进程名称
    NI: 进程优先级
    S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态。

使用h查看里面的内建命令

交互界面下可以使用的快捷键的功能如下:

h : 显示帮助信息

q : 离开程序退出
c :按照 CPU 实时负载对系统进程进行排序
m :按照内存使用状况对系统进程排序
i:按照 I/O 使用状况对系统进程排序
p: 按照进程名称排序
d : 显示磁盘读写状况
w : 删除日志文件
l :显示日志
s: 显示传感器信息
f : 显示系统信息
1 :轮流显示每个 CPU 内核的使用情况(次选项仅仅使用在多核 CPU 系统)

(10)  dstat命令:动态显示CPU,disk,net,page,system负载情况等

  语法格式:

    dstat [-afv] [options..] [delay [count]]

       常用选项:

        -c: 显示cpu相关信息;

-C #,#,...,total

-d: 显示disk相关信息;

-D total,sda,sdb,...

-g:显示page相关统计数据;

-m: 显示memory相关统计数据;

-n: 显示network相关统计数据;

-p: 显示process相关统计数据;

-r: 显示io请求相关的统计数据;

-s: 显示swapped相关的统计数据;

    

    --top-cpu:显示最占用CPU的进程;

--top-io: 显示最占用io的进程;

--top-mem: 显示最占用内存的进程;

--top-lantency: 显示延迟最大的进程;

    --ipc 显示ipc消息队列,信号等信息

    --socket 用来显示tcp udp端口状态

    -a all 此为默认选项 等同于 -cdngy

    -v vmstat 等同于 -pmgdsc -D total

    --output 文件 此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中,以便日后查看

 

 

 

(11)  kill命令:向进程发送控制信号,以实现对进程管理

          显示当前系统可用信号:

             # kill –l

             # man 7 signal

       常用信号:

        1) SIGHUP: 无须关闭进程而让其重读配置文件;

          2) SIGINT: 中止正在运行的进程;相当于Ctrl+c

        9) SIGKILL: 杀死正在运行的进程;

        15) SIGTERM:终止正在运行的进程;

        18) SIGCONT

        19) SIGSTOP

      指定信号的方法:

        (1) 信号的数字标识;1, 2,9

        (2) 信号完整名称;SIGHUP

        (3) 信号的简写名称;HUP

      向进程发信号:

          kill [-SIGNAL] PID...

     终止“名称”之下的所有进程:

          killall[-SIGNAL] Program

上面重要的是tophtopglancesdstat的使用,如果想查看这几个命令的更详细的操作,使用man命令。