进程监控及管理常用命令

一、进程

linux进程概念:

         进程是一个执行中的程序的实例(副本),所有系统上运行的数据都会以进程的类型存在。进程是计算机科学中最深刻最成功的概念之一。进程提供给应用程序的关键抽象是:

1.一个独立的逻辑控制流,它提供一个假象,好像我们的应用程序独占地使用处理器。

2.一个私有的地址空间,它提供一个假象,好像我们的程序独占地使用存储器系统。

      每个进程都有一个唯一的数字标识符,称为进程 ID ,它总是一个非负整数。使用 top, htop 等工具就可以看到操作系统当前的进程列表,并且会按照一定的指标进行排序。


      一个老进程会成为新进程的父进程,那么新进程就是老的进程的子进程。一个进程除了有一个PID之外,还会有一个PPID来存储的父进程 PID。所有进程的源头是 init 进程,即所有的进程会构成一个以 init (CentOS7下是systemd)为根的树状结构。


进程状态:

    运行状态:进程正在运行或在运行队列中等待运行 。
    可中断等待状态:进程正在等待某个事件完成(如等待数据到达),等待过程中可以被信号或定时器唤醒。 
    不可中断等待状态:进程正在等待某个事件完成并且等待中不可以被信号或定时器唤醒,必须一直等待到事件发生。
    僵死状态:进程已终止,但进程描述符依然存在,直到父进程调用wait()函数后释放。 
    停止状态:进程因为收到SINSTOP,SIGSTP,SIGTIN,SGIOU信号后停止运行或者该进程正在被跟踪。



二、常用命令

1)pstree命令:进程树查看命令wKiom1b2J2eDMtYyAAAve_KycRM304.png



2)ps命令:

      /proc/:内核中的状态信息;

 内核参数:模拟成文件系统类型;

可设置其值从而调整内核运行特性的参数;/proc/sys/

状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;


每个进程都在/proc/目录下有个以PID号命名的子目录,目录中存放了当前进程的各种状态参数。

wKioL1b2KCyyrwdUAABa814c4eU717.png


 启动进程的方式:

    系统启动过程中自动启动:与终端无关的进程;

    用户通过终端启动:与终端相关的进程,关闭终端其子进随之关闭;

ps常用选项:

          a 所有与终端相关的进程;

          x 所有与终端无关的进程;

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

常用组合一:ps  aux

wKioL1b2KJji-2C5AABHJMC3e8U341.png

   VSZ: 虚拟内存集;

  RSS: 常驻内存集(不能放到交换内存中的);

  TTY: 终端类型

 STAT: 当前进程的状态

         R  running 运行中

         S  可中断睡眠

         D  不可中断睡眠

         T  停止状态

         Z  僵死状态

         +  前台进程(运行于终端之上且占据着命令提示符)

         l  多线程进程

         N 低优先级进程

        <  高优先级进程

        s   session leader 一个会话的引导着

 

   ps -e :显示所有进程

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

常用组合:ps   -ef

wKiom1b2KFqTZNcSAAAp9NmJ494628.png      

          PPID:父进程的进程号

            C : cpu的占用百分比

         STIME:启动时间

          TIME:累计运行时间

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

                       PSR:运行于哪颗cpu

ps -H: 以层级机构显示进程的相关信息;

常用组合三:ps -eFH

常用组合四:ps -eoaxo

       o后边跟可用参数,即要显示的字段列表,以逗号隔开

        ps axo pid,ni,psr,pcpu,stat,comm,tty

       ninice值;

       pripriority, 优先级;

       rtprioreal time priority,实时优先级;



3)pgreppkill命令:进程过滤

      pgrep [options] pattern

   -u uideffective user有效的用户进程

   -U uidread user 某用户启动的进程,只显示进程号

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

   -l:显示进程名;

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

   -P pid:显示此进程的子进程;

     pidof命令:

  根据进程名,取其pid

wKiom1b2KPSybjhMAAAFQHsZO_M381.png



4)top命令:

wKioL1b2KcWjwXqJAABY2D6uUSs126.png

 字段含义:PR  优先级

             NI   nice

             VIRT 虚拟内存集

             RES 常驻内存集

             SHR 共享内存空间

             S    当前状态

  显示排序方式: P 以占用CPU百分比排序;

                    M 以占据内存百分比排序;

                    T 以累计占用CPU时间排序;


  首部信息:uptime信息:l命令

   taskscpu信息:t命令

   内存信息:m命令

             单个cpu占用显示 1

   退出命令:q

   修改刷新时间间隔:s

   终止指定的进程:k


常用选项:

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

     -b:以批次方式显示;

     -n #:显示多少批次;



5)htop命令:

wKiom1b2KaGxGqCKAACVHISYt0U714.png

选项:

   -d #:指定延迟时间间隔;

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

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

 子命令:

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

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

    t:以层级关系显示各进程状态;

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



6)vmstat命令:vmstat 2 5 两秒显示一次共显示5

wKiom1b2KebQ6kP2AAAkqvo1J5c492.png

各字段含义:

  • proc  

       r:等待运行的进程个数,cpu上等待运行的任务的队列长度(cpu性能)

       b:处于不可中断睡眠状态的进程个数,被阻塞的任务队列的长度(I/O性能)

  • memory

       swpd:交换内存的使用总量;(查看内存)

       free:空闲的物理内存总量;

       buffer:用于buffer的内存总量;

       cache:用于cache的内存总量;(解决两个设备速度不对等)

  • swap

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

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

  • io

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

   bo: 保存数据至块设备的速率(kb/s

  • sysytem

  in:中断速率,每秒几个

  cs:上下文切换的速率

  • cpu

       us:用户空间

       sy:内核空间

       id:空闲的空间

       wa:等待i/o

       st:被虚拟化偷走的空间

 vmstat -s :显示内存统计数据

wKioL1b2Kx-BRTN-AABNuodqfAs619.png


  

7)dstat命令:

wKioL1b2LRPjh9CKAABBubZ9MLA185.png

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

       常用选项:

             -c--cpu:显示cpu相关信息;

             -C #,#,...,total

             -d, --disk:显示磁盘的相关信息

             -D sda,sdb,...,tobal

             -g:显示page相关的速率数据;

             -mMemory的相关统计数据

             -nInterface的相关统计数据;

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

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

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

显示  --tcp 、--udp、--raw、--socket 、--ipc 相关信息

wKioL1b2LenxFlC4AAA1W-3khqY664.png

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

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

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

--top-latency:延迟最大的进程

wKiom1b2LW2QIbU0AABfFgE-x8k224.png



8)kill命令:


- terminate a process:用于向进程发送信号,以实现对进程的管理;


显示当前系统可用信号:

              kill -l [signal]

每个信号的标识方法有三种:

         1) 信号的数字标识;

         2) 信号的完整名称;

         3) 信号的简写名称;

向进程发信号:

kill  [-s signal|-SIGNAL]  pid...


常用信号:

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

    2SIGINT:终止正在运行的进程,相当于Ctrl+c

    9SIGKILL:杀死运行中的进程;

    15SIGTERM:终止运行中的进程;

   18SIGCONT

   19SIGSTOP

killall命令:


   - kill processes by name

    killall  [-SIGNAL]  program