进程: 是指一个具有独立功能的程序在一个数据集合上的一次运行活动,即每个程序模块和它执行时所处理的数据,组成了进程。

进程与程序的区别

         1.  进程是动态的,程序是静态的

         2.  进程有生命周期的,程序是永久的

         3.  一个程序可以包含多个进程,一个进程也可以包含多个程序(调用其它程序)

一个程序是由指令加数据组成一个静态的文件放在外部存储上(如硬盘),在必要的时候,cpu运行这个程序,那么由cpu的控制指令从外部存储加载至内存,并且完成运算的这么一个过程,叫做进程,进程是有生命周期的。

        线性内存:线性地址,在linux的32位系统中,逻辑上假设每个进程都是独占4G内存,其中 1G分配给内核使用,其余的3G内存由进程使用。而在真实的内存中就是把内存本身划分成一个个的页框,每个页框都是固定大小的存储单元(4K),当进程使用内存时,根据需要会分配给n个页框对应给虚拟地址的页面给进程使用,而且各个页框之间可能是不相临的,不连续的,但对进程本身来看,是连续的,保存存在数据结构中的内存。把线性地址中的页面映身到真实的物理地址,是MMU(Merrory Management Unit内存管理单元)的功能,为了改进虚拟地址到物理地址转换的速率,把每个页面转换后保存到缓存中去,这个过程叫TLB(后备缓冲器,或叫页面缓存)

         进程切换,上下文切换(Context Switch): 在单核单个cpu当中,一次只能有一个任务在cpu中运行,当一个进程没有运行完成就进行任务切换。在切换时,一个进程存储在处理器各寄存器中的中间数据叫做进程的上下文,所以进程的 切换实质上就是被中止运行进程与待运行进程上下文的切换。在进程未占用处理器时,进程 的上下文是存储在进程的私有堆栈中的。

         保存现场:在进程切换前,把进程A的当前运行信息,如程序执行到的当前位置,程序状态字,所有的寄存器值保存到进程A的PCB(Process Control Block)中。

         恢复现场:从进程B的PCB中获取进程的执行信息,将这些信息写入相应的寄存器中,程序计数器指向进程B将执行的下一条指令。进程B可能第一次开始执行,也可能是被中断过的进程,恢复执行。不论是哪种情况,进程B的执行信息都能在其PCB中找到。

        进程切换与模式切换:  进程切换是作用于进程之间的一种操作。当分派程序收回前进程的CPU并把它分派给某个就绪进程时,叫进程切换。  模式切换是进程内部所引用的一种操作。当用户程序转入系统调用如I/O操作,或系统调用转入程序时,叫模式切换。进程切换一定会有模式切换,模式切换就不一定有进程切换。

        

       进程所拥有的常见状态:

             Stopped :  停止状态

             Ready    :    就绪状态,准备运行

             Running(Executing)  :  正在运行(执行)状态

             Sleeping  :  睡眠状态,睡眠状态有两种;

                      Uninterruptible   Sleeping: 不可中断睡眠状态    当一个进程需要调用额外的I/O资源(硬盘资源)时,由于I/O资源速度太慢,进程一定会转入睡眠状态,当I/O没有执行完时,进程不可以再被调入CPU执行,叫不可中断睡眠状态

                       Interruptible   Sleeping : 可中断睡眠状态     当一个进程不是由于额外I/O进入睡眠状态,而时处于随时可以唤醒状态,叫可中断睡眠状态

               Zombie :  僵死进程,正常执行完成的进程,但内存没有被释放的进程。除了INIT进程外,每个进程都有其父进程,当进程结束时由父进程负责回收其子进程的资源,如果当父进程意外终止时,子进程无法释放其所占的资源,叫做Zombie。

 

         进程优先级:在linux中有0-139共140个优先级,数字越小,优先级越高。其中0-99的优先级是由内核调整的,100-139可以由用户调整 nice(-20 -- 19)值来调整优先级,普通用户只能调大nice值用来降低其优先级,root用户可以调整 对应的nice值来提高或降低进程的优先级。一般默认进程的nice值是0。

        进程管理命令:

        pstree :  进程树,显示以树结构的进程列表。用这个命令可以了解进程的层次结构。进程管理(一)_第1张图片如图所示,init进程是第一个进程

          ps : Process Stat 显示系统当前进程状态的命令;

                 PID : 进程ID,进程开始后指派给此进程的唯一标识符。PPID:父进程ID,创建了当前进程的父进程的PID。

                 COW : copy on write 写时复制,父进程创建子进程时,为了推迟甚至避免拷贝数据的技术,内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。只 用在需要写入的时候才会复制地址空间,从而使各个进程拥有各自的地址空间。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共 享。这种技术使地址空间上的页的拷贝被推迟到实际发生写入的时候。

               ps命令的参数:                             

                            a : 显示所有跟终端有关的进程

                            u:显示用户信息,以用户为中心显示进程的想在关信息

                            x: 显示所有跟终端无关的进程

命令显示效果如图

进程管理(一)_第2张图片

PID 进程号                        VSZ  虚拟内存集                      RSS  常驻内存集   

TTY 显示与终端相关的信息 ?表示与终端无关,            TIME  运行时长   

STAT  进程状态                TIME  运行时长                       COMMAND 进程命令

          ps 的另外一组参数  -elf

进程管理(一)_第3张图片

   PRI  显示的是进程的优先级                NI   nice值,可以调整nice值来更新进程的优先级

   PSR  运行在哪个CPU上

 

top 命令: 显示正在运行的系统的进程的实时视图,默认每隔5秒钟刷新一次

进程管理(一)_第4张图片

top 前五行是统计信息区,是系统整体的统计信息

1. 第一行是任务队列信息,和uptime 命令的执行结果,显示当前时间,up 运行时间,user 当前登陆用户,load average 系统负载,即任务队列的平均长度。三个值为1min 5min  15min 钟前到现在的平均值。

2. 第二、三行为进程和CPU信息,当有多个CPU时,这些内容会超过两行,按数字1 可以展开每个CPU的信息,不展开显示的是CPU的平均值。

Tasks 进程总数            running 正在运行的进程数          sleeping 睡眠的进程数  

stopped 停止的进程数       zombie   僵死的进程数       CPU(s):0.0%  us  用户空间占用的cpu百分比(平均值)       sy  内核空间占用cpu百分比          ni  用户进程空间内改变过优先级的进程占用cpu百分比       id  空闲cpu 百分比    wa  等待I/O所未CPU时间百分比

hi  硬件中断所占cpu时间百分比    st   虚拟机所占cpu 时间百分比

3.  第四、五行为内存信息

Mem  物理内存总量     used  使用的物理内存总量   free  空闲内存总量   buffers 用做内核缓存的内存量

Swap  交换区总量    used  使用的交换区的总量      free 空闲交换区总量  cached 缓冲的交换区的问题。

 

进程信息:

PID  USER      PR(优先级)  NI  VIRT(虚拟内存级)  RES(常驻内存级) SHR(共享内存) S(状态) %CPU %MEM    TIME+(进程所占CPU的时间总计,单位是百分之1秒)  COMMAND (命令名/命令行)    

 

top命令参数

          -d # :  指定信息刷新时间间隔,单位是秒,top默认的刷时为5秒, top –d 3表示每隔3秒种刷新一次。

           -s  :  使top命令在安全模式中运行,这将去除交互命令所带来的潜在危险

           -b  :  批模式, 翻屏显示信息,不再实时刷新,因为实时刷新时有可能一屏显示不会所有的进程。但会一直翻屏显示,除非ctrl +c 终止

           -n # : 在批模式中,后面加-n # ,表示只显示#屏,如top –b –n 3 只显示top命令一共3屏的信息。

        

交互式命令

top :

       M :  根据驻留内存大小 进行排序

        P: 根据CPU使用百分比大小进行排序

        T: 根据时间/累计时间进行排序

 

         l  :  切换显示平均负载和启动时间信息。即显示隐藏第一行的信息

        m: 切换显示内存信息。即显示隐藏内存行

        t : 切换显示进程和CPU状态信息。即显示影藏CPU行

       

        c  :  是否显示完整的命令行信息

        k  : 终止某个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。

        q :   退出程序。