一、进程简介

   

    进程是linux用来表示正在运行的程序的一种抽象概念,程序内存的使用,处理器时间和I/O资源就是通过这个对象进行管理和监视的。

   一个程序要先运行在用户空间,当他需要去使用硬件资源的时候,就不得不去调动内核才能取得使用权,这时候调动内核,进入内核空间,当内核处理完毕需求之后,将指令返回给用户,一个调用完成。

   进程会以时间片段在CPU运行的,CPU以一根时间线被划分成无数个片段;当一个进程运行到某个阶段,需要暂时终止的时候,需要保存一个进程运行的现场,叫保存现场;执行到某片段的时候,需要中断,当再需要执行的时候,恢复现场。

   运行中的程序的某个副本才叫进程;进程有生命周期,进程时活动的。

   内核为每个进程都要创建一个运行信息,存储每一个进程的相关信息,及进程的结构体,即task struct。这里面的信息有:

        1.进程的地址空间映射;

        2.进程的当前状态(睡眠状态,停止状态,可运行状态等)

        3.进程执行的优先级;

        4.进程已用资源的信息;

                            5.进程已打开的文件和网络端口的信息;

                            6.进程的信号掩码(一个记录,确定要封锁哪些信号)

                            7.进程属主。

   一个进程由一个地址空间和内核内部的一组数据结构组成。地址空间是内核标记出的供进程使用的一组内存页面。它包含了进程只在执行的代码和库,进程变量,进程栈以及进程运行时所需要的各种其他信息。

   一个线程是一个进程内执行了一次fork()的结果,线程继承了包含他的进程的许多属性(进程的地址空间等)。

    进程的调度优先级决定了他接受到CPU的时间的多少。nice值决定了进度优先级。静态nice值越小,优先级越高。

    为了创建一个新的进程,一个进程就会用系统fork来复制自身,fork创建原进程的一个副本,这个副本大致与父进程相同,新进程拥有不同的PID。

    fork具有独一无二的特性,它能够返回两个值,对子进程来说,返回为0,对父进程来说,返回一个PID。

    linux系统最独特进程时init进程。进程号总为1,他是其他进程的GOD,除了内核创建的几个进程外,其他所有进程都是他的后代。

 

 二、linux系统上进程查看及管理工具:


          CentOS 5:SysV init 

          CentOS 6:upstart

          CentOS 7:systemd


 三、 htop命令

    

     3.1安装hotp方法(以阿里云网站为环境)

      

    wKioL1cIqciS1-ZfAAAR1vSj4xw906.png

      

    Ali.repo内部内容(CentOS 6为例)

         [epel]

            name=Ali EPEL

            baseurl=http://mirrors.aliyun.com/epel/6/$basearch/

            gpgcheck=0

       

       3.2 htop显示


        wKiom1cIqVXw3gsIAABTIx0oXbI416.png


  右边tasks只是用户空间的进程;

    支持鼠标,点或者按F1进入帮助选项

wKioL1cIquOzJPlXAABQACMT2AE995.png

 子命令:

    u:查看某个用户进程    H:显示或隐藏用户线程    K;隐藏或显示内核线程

    F6:指定排序   F:光标在哪个线程   PMT:排序方式    c:标记出一个进程和子进程

    a:将选定的进程绑定至某指定的CPU核心;   l:跟踪显示某个进程打开的所以文件

    s:跟踪选定的进程的系统调用;    t:以层级关系显示各进程状态;

    选项:

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

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

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

        可以利用子命令进行想要的显示。

 

 四、dstat命令

   4.1 dstat:用于生成资源信息统计的工具。默认给的选项是-cdngy


   wKioL1cIryLDPUk8AAA68eZbue8507.png


     4.2 格式:dstat [-afv] [options..] [delay [count]]


      常用选项:

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

           -C #,#,...,total

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

           -D sda,sdb,...,tobal

       -n:Interface的相关统计数据;

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

       -m:Memory的相关统计数据

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

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

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

       -y:system

   

   示例:

         wKiom1cIrpfCYmcNAAAWhNhqOc0780.png


  wKioL1cIr9Cw4c6wAAAhYm72CxM450.png


    

                --aio:统计异步IO

        --ipc:统计进程间各自通信信息(消息队列,信号量,共享内存)

        --lock:文件锁信息:

        --tcp:动态显示TCP状态各连接状态信息的数量

         --udp:动态显示UDP状态各连接状态信息的数量

        --raw :裸套接字相关信息

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

  示例:

  wKioL1cIsGuiqiLaAAAY1Ck96S0391.png


       #还可显示占用资源量较大的进程

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

  wKiom1cIsE7BCzuCAAAP1k51oVk754.png 

  

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

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

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


 四、top命令


   4.1显示linux的进程信息

              wKiom1cIsT_SrBCVAABVDTKDCoE221.png

   

    4.2  排序:


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

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

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

      首部信息分为三块:

             uptime信息:l命令

            tasks及cpu信息:t命令

            内存信息:m命令

        

     其中第一行信息解释:

       显示系统时间、运行时长及平均负载;过去1分钟、5分钟和15分钟的平均负载;等待 运行的进 程队列的长度;

     第三行:

         us:用户空间进程占用的CPU百分比

         sy:内核空间进程占用的CPU百分比

         ni:用于nice值调整占用的CPU百分比

         id:空闲百分比

         wa:等待IO消耗的时间CPU百分比

         hi:处理硬件中断消耗的CPU百分比

         si:处理软件终端小号的CPU百分比

         st:被虚拟环境偷走的CPU百分比


   进程状态字段含义:

         PR:进程优先级

         NI:nice值

         VIRT:虚拟内存集

         RES:常驻内存集

         SHR:共享内存空间

         S:当前状态

         %CPU:占用CPU时间百分比

         %MEM:占用内存百分比

         TIME+:运行时间


           退出命令:q

           修改刷新时间间隔:s


       wKioL1cItHHSfdX8AABQ8AzIUh0167.png

           

          终止指定的进程:k

      wKiom1cIs9nCJ2VeAABIOYWj8UM011.png

        

       使用选项:

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

           -b:以批次方式显示;

           -n #:显示多少批次;

 

  五、ps命令


    5.1 ps:报告当前进程的信息


                    wKiom1cItJvilLZFAAAIxTsEKt4390.png


     ps - report a snapshot of the current processes.



       启动进程的方式:

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

          用户通过终端启动:与终端相关的进程


       选项:

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

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

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

           

           -e:显示所有进程

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

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

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



    

    5.2常用组合之一  aux

     

     wKioL1cItfjSdIIvAAAs8yN2Jhs151.png

    显示的第一行的意义:

      VSZ:虚拟内存集;

      RSS:Resident Size,常驻内存集;

      STAT:状态

        R:running 运行中状态

        S:interruptable sleeping 可中断睡眠状态

        D:uninterruptable sleeping 不可中断睡眠状态

        T:Stopped 停止状态

        Z:zombie 僵死状态

        +:前台进程

        l:多线程进程

        N:低优先级进程

        <:高优先级进程

        s:session leader

 

    5.3常用组合之二  -ef

           

                wKiom1cItr_gW3qAAAAoTCzrPU4757.png

  

   显示的第一行的意义:

    PPID:父进程

    C:CPU的占用百分比

    STIME:启动时间

    TTY:与何终端相关

    TIME:CPU累积运行时间

 

  5.4常用组合之三  -eFH

    wKiom1cIuBTg4lQ9AAAkXwZNDUk186.png


   显示的第一行的意义:

     PSR:运行于哪颗CPU之上

      SZ:使用掉的内存大小

  

   5.5常用组合之三  -ex ,axo

  

         o field1,field2....:自定义要显示的字段列表,以逗号隔开

              常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio

                 ni:nice值

                 pri:priority,优先级

                 rtprio:real time priority,实时优先级

          

                                  wKiom1cIuX_SL4nlAAAWdz_brZ4617.png