Linux之进程查看与管理

  

  1、进程的基本概念

     进程是运行起来的程序。唯一标示进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的

     进程分类:交互式进程、批处理进程、实时进程

         交互式进程:一般是由Shell启动的进程。交互式进程有:控制台命令shell,文本编辑器,图形应用程序

         批处理进程(Batch Process):不需要用户交互,一般在后台运行。

         实时进程:这种进程不能被低优先级进程阻塞,并且在很短的时间内做出反应。典型的实时进程:音视频应用程序,机器人控制等

     进程优先级:静态优先级、动态优先级

         静态优先级(priority): 被称为“静态”是因为它不随时间而改变,内核不会修改它,只能通过系统调用nice(每个进程都会具有的属性,一个能影响进程优先级的数字)去修改

             静态优先级内核为其分配的优先级数为:100(高优先级)-139(低优先级),数值越大,优先级越低

         动态优先级(counter): 只要进程拥有CPU,它就随着时间不断减小;当它为0 时,标记进程重新调度

         实时优先级:实时优先级只对实时进程有意义。1-99:实时优先级,数字越大优先级越高

     进程状态:运行态(running正在运行的进程)、可中断睡眠态(进程处于睡眠状态,但是可以被中断)、不可中断的睡眠态(进程处于睡眠状态,但是不可以被中断)、停止态(stoped不会被内核调度)、僵死态(zombie产生的原因是进程结束后,它的父进程没有wait它,所导致的)


  2、进程与线程区别

     进程包含四个要素:一段供进程执行的程序,该程序可以被多个进程执行、独立的内核堆栈、进程控制块(task_struct)、独立的存储空间。线程只包含了进程前面三种要素,线程分:内核线程(完全没有用户空间)、用户线程(共享用户空间)


  3、常见的进程查看以及管理工具:top、pstree、pidof、pgrep、pkill、htop、glances、pmap、vmstat、dstat、iostat、kill、job、bg、fg

     pstree命令:以树状图显示进程间的关系

     语法:pstree [-acGhlnpuUV][-H <程序识别码>][<程序识别码>/<用户名称>]

     常见参数选项

         -a:显示每个程序的完整指令

         -p:显示程序识别码

     练习:

     1)、查看当前进程树以及显示程序识别码

wKiom1X7zJqQmwiCAAKwHfGspQk158.jpgwKiom1X7zKXygs2hAALt9egxtD0613.jpg

     

     ps命令:是Process Status的缩写,显示当前进程的状态

     语法:ps[参数]

     常见参数选项

         a:显示所有进程

         u:指定用户的所有进程

     -e: 显示所有进程

   -f: 显示丰富格式信息

   -F: 显示额外信息

         -H: 以层级形式显示进程间关系


     组合参数

      -aux:显示所有包含其他使用者的进程 

       -ef:丰富格式显示进程状态

      -eFH:层级显示额外信息

       axo:自定义显示内容,如:ps axo pid,command,psr,pri

     练习:

     1)、显示当前进程状态

wKiom1X7zLKAV5QiAAKf7w7SA-A915.jpg

     注解上图各个字段的意义

     USER:进程使用者账号

     PID :进程编号

     %CPU:使用掉的CPU资源百分比

     %MEM:占用的物理内存百分比

     VSZ :使用虚拟内存量 (Kbytes)

     RSS :占用的固定的内存量 (Kbytes)

     TTY :占用终端,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序

     STAT:目前的进程状态,主要的状态有

       R :运行

       S :睡眠 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒

       T :停止

       Z :终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态

    START:被触发启动的时间

    TIME :CPU 运作的时间

  COMMAND:运行的指令

    2)、自定义显示id、命令、优先级、cpu编号

wKiom1X7zL3SHeF3AAFJN26hxgU463.jpg


    pgrep命令:查找或者发信号给进程通过名称和其它属性

    语法:pgrep [参数] 程序名

    常见参数选项:

       -l:同时显示进程名和PID

       -o:当匹配多 个进程时,显示进程号最小的那个

       -n:当匹配多个进程时,显示进程号最大的那个

    练习:

    1)、显示当前ssh进程的ID,并且列出最小的那个

wKiom1X7zMexFECGAAC1F0cUbSw859.jpg


    pidof命令:用于查找一个运行的程序的PID (不常用,仅供了解)

    常见参数选项

       -s:只返回1个pid

       -x:返回运行给定程序的shell的pid

       -o:忽略后面给定的pid 

    练习:

    1)、显示httpd进程PID

wKioL1X7zwuCZdWOAABbYlC5-C4810.jpg

   top命令:显示系统当前的进程和其他状况,动态显示

   语法:top [参数] [选项]

   常见参数选项、交互命令

       交互命令

         P:以占据的CPU百分比大小排序;

    M:以占据Memory空间大小排序;

    T:CPU累积占用时间排序;

         l: 是否显示系统负载行;

    t: 是否显示进程摘要信息及CPU负载状态;

    1:平均或单独显示CPU的负载状态;

    m: 是否显示内存相关的状态信息;

    q: 退出命令

         s: 修改延迟时长

    k: 终止指定进程

   选项

       -d:屏幕信息刷新之间的时间间隔

       -b: batch,批次显示

     -n #: 显示的批次数量 

   练习:

   1)、显示当前进程状态

wKioL1X7zxahI_xbAAQ_y-yGir4202.jpg

   注解上图各行、字段的信息,主要说明前5行系统整体的统计信息内容,第6行跟ps命令查下进程状态字段类似,这里不重复

   第1行依此为:当前时间、系统运行时间(时:分)、当前登录用户数、load average(系统负载)、三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值 

   第2行依此为:进程总数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数

   第3行依此为:用户空间占用CPU百分比、用户进程空间内改变过优先级的进程占用CPU百分比、空闲CPU百分比 、等待输入输出的CPU时间百分比 

   第4行依此为:物理内存总量、使用的物理内存总量、空闲内存总、用作内核缓存的内存量 

   第5行依此为:交换区总量、使用的交换区总量、空闲交换区总量、缓冲的交换区总量

   2)、更新两次后终止更新显示

wKioL1X7zybBa_pDAAUPFoT4Fs4271.jpg

   3)、top视图监控每个逻辑CPU的状况并且高亮显示(按键“1”、“b”)

wKiom1X7zPjTgmUIAAPYLBq9-bM478.jpg

   4)、改变当前进程状态以%MEM排序(注:可通过”shift + >”或”shift + <”可以向右或左改变排序列)

wKioL1X7zz2iW2gMAAZL-zm9JEU199.jpg


   uptime命令:查询linux系统负载的。用法比较简单并且查下的出来的结果与top命令第一行load average类似这里不做详细介绍,下图与上图top命令可对比一下

wKiom1X7zQ_y1KRpAAB40lu_iME033.jpg


   htop工具:基本文本模式的、交互式的进程查看器,主要用于控制台或shell中,可以替代top,或者说是top的高级版。默认不安装,需要手动安装。有以下几个优点:快速查看关键性能


统计数据、横向或纵向滚动浏览进程列表、杀掉进程时可以直接选择而不需要输入进程号、鼠标操作条目、比top启动得更快

   常用选项功能

     F1 : 查看htop使用说明

     F2 : 设置

     F3 : 搜索进程

     F4 : 过滤器,按关键字搜索

     F5 : 显示树形结构

     F6 : 选择排序方式

     F7 : 减少nice值,这样就可以提高对应进程的优先级

     F8 : 增加nice值,这样可以降低对应进程的优先级

     F9 : 杀掉选中的进程

     F10 : 退出htop


     / : 搜索字符

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

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

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

     t : 显示树形结构


     H :显示/隐藏用户线程

     I :倒转排序顺序

     K :显示/隐藏内核线程    

     M :按内存占用排序

     P :按CPU排序    


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

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

     Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程

    练习:

    1)、安装显示当前系统进程状态

wKioL1X7z1jzjB-uAAgli3wf-Aw904.jpg

    2)、树形显示,杀掉进程httpd

wKioL1X7z3qzU0B5AAherxCz2SE120.jpg

    3)、显示当前系统进程搜索httpd进程

wKiom1X7zU2jk50YAAMKd3zVY9o274.jpg

   

  vmstat命令:Virtual Meomory Statistics(虚拟内存统计)的缩写,监控虚拟内存、进程、CPU

  语法:vmstat [参数]

  常见参数选项

      -a:显示活跃和非活跃内存

       r: 等待运行的进程的个数;(队列长度)

   count:刷新次数

      -S:使用指定单位显示( k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte))。默认单位为K(1024 bytes)

    练习:

    1、显示当前进程情况

wKioL1X7z5by9ru0AADGNUJ5nIA761.jpg

    对上图各字段说明:

    Procs(进程):

    r: 运行队列中进程数量

    b: 等待IO的进程数量

    Memory(内存):

    swpd: 使用虚拟内存大小

    free: 可用内存大小

    buff: 用作缓冲的内存大小

    cache: 用作缓存的内存大小

    Swap:

     si: 每秒从交换区写到内存的大小

     so: 每秒写入交换区的内存大小

     IO:(现在的Linux版本块的大小为1024bytes)

     bi: 每秒读取的块数

     bo: 每秒写入的块数

    系统:

     in: 每秒中断数,包括时钟中断

     cs: 每秒上下文切换数

     CPU(以百分比表示)

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

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

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

     wa: 等待IO时间


  glances工具:网络、磁盘读写、磁盘分区等情况(工具包需要手动安装)

  常用选项:

    -b: 以Byte/s为单位显示网卡设备数据交换速率;

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

    -f /PATH/TO/SOMEFILE:设置输出文件的位置及格式

    -o HTML|CSV:使用HTML/CSV格式

    -m: 关闭mount功能模块

    -n: 关闭网络功能模块

    -r: 关闭进程列表功能模块

    -t #: 指定延迟时长,默认为3秒

    -1:单独显示每颗CPU相关负载数据信息

   glances支远程模式(C/S):

      Server: 以监听模式启动glances

      Client: 以远程模式启动glances,远程连入指定服务器,并显示Server上的相关性能数据    

   服务模式:glances -s -B 本地IP地址

         -B: 用于指明监听的本地地址;     

   客户端模式:glances -c 服务器IP地址

           -c: 用于连入的服务器的地址;

    练习:

    1)、当前系统状态,输出 HTML 格式文件

wKiom1X7zW7wIfXtAABoqaWtBPI070.jpgwKioL1X7z7HxVte4AAGYHt6jYyQ499.jpg

     注意需要安装需要python-jinja2库

    2)、远程查看192.168.2.10(注意关闭防火墙)系统状态

wKioL1X7z7-QW6t-AACLjrNOYog659.jpgwKiom1X7zZDis3j8AACbW2GW2u0693.jpgwKioL1X7z9eRdfwyAANcTkNmAWI862.jpg


  dstat工具:实时地看到所有系统资源(可取代vmstat,iostat,netstat和ifstat这些命令)

  语法:dstat [-afv] [options..] [delay [count]]

  常见参数选项

     -l :显示负载统计量

     -m :显示内存使用率 

     -r :显示I/O统计

     -s :显示交换分区使用情况

     -t :将当前时间显示在第一行

     -c : 显示cpu性能指标相关的统计数据;

     -d : 显示disk相关的速率数据

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

     -i : 显示interrupt相关的速率数据

     -n : 显示网络收发数据的速率

     -p : 显示进程相关的统计数据

     -y : 显示系统相关的数据,包括中断和进程切换

     --tcp :显示常用的TCP统计

     --udp :显示监听的UDP接口及其当前用量的一些动态数据

     --disk-util :显示某一时间磁盘的忙碌状况

     --freespace :显示当前磁盘空间使用率

     --proc-count :显示正在运行的程序数量

     --top-bio :指出块I/O最大的进程

     --top-cpu :图形化显示CPU占用最大的进程

     --top-io :显示正常I/O最大的进程

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

    练习:

    1)、显示系统资源情况

wKiom1X7za7CxaCwAAIK3ey5F70942.jpg

    简要注解上图字段说明

    CPU状态:CPU的使用率

    磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数

    网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数

    分页统计:系统的分页活动。

    系统统计:这一项显示的是中断(int)和上下文切换(csw)

   2)、显示当前网络情况

wKioL1X7z_TgnVQ6AABw8yTBkvg294.jpg

   

   killall命令:杀死所有指定进程(kill processes by name)

   语法:killall[参数][进程名] 

   常见参数选项

      -e:要求匹配进程名称

      -i:交互模式,杀死进程前先询问用户

      -l:列出所有的已知信号名称

      -q:不输出警告信息

      -s:发送指定的信号

      -v:报告信号是否成功发送

      -w:等待进程死亡

    kill命令:终止指定的进程(terminate a process)的运行

    kill[参数][进程号]

    常见参数选项

      -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号

      -s:指定发送信号

      -u:指定用户 

   常用信号

   HUP    1    终端断线

   INT     2    中断(同 Ctrl + C)

   QUIT    3    退出(同 Ctrl + \)

   TERM   15    终止

   KILL    9    强制终止

   CONT   18    继续(与STOP相反, fg/bg命令)

   STOP    19    暂停(同 Ctrl + Z)

   练习:

   1)、用ps查找进程vim,然后用kill杀掉

wKiom1X7zcfCAR3nAAF7V8hJGuQ280.jpg

   2)、杀死所有同名httpd进程

wKioL1X70AyAr6POAALP_c9mTYI603.jpg

   3)、用ps查找进程vim,然后用kill杀掉所有同名进程

wKiom1X7zd3BCQXfAAFs2aeuCtk732.jpg

   

  下面简单介绍一下作业管理

   作业管理指的是控制正在运行的进程的行为,有前台作业、后台作业。。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。

   前台作业:通过终端启动,并且在停止之前也会一直占据终端

   后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行

   作业管理常用操作命令

       &:命令放在后台执行

       jobs:查看后台作业

       fg:作业后台到前台(后台stopped、后台running,到前台running)

       bg:让作业后台运行(后台stopped,到后台running)

   常用快捷键

   Ctrl+C:结束当前命令

   Ctrl+D:输入结束(EOF)

   Ctrl+Z:当前作业放到后台并暂停

   Ctrl+S:暂停屏幕输出

   Ctrl+Q:恢复屏幕输出 

   练习:

   1)、将ping 192.168.2.10命令后台执行,查看后台作业,然后再掉到前台运行,最后结束当前命令

wKiom1X7zeuRIk4VAAPDjNuYfog473.jpg