Linux基础-----进程管理

进程:运行中的程序

程序:指令+数据组成

执行某个程序,将程序的指令加载到内存,CPU从内存中逐条执行指令,并处理数据输出至IO

程序实现并行的方式:

     CPU:使用分时操作,随着时间的流逝,将CPU分割成时间片,给某个程序几毫秒的时间片,时间片耗尽,程序暂停,保存现场

            然后给下个程序分配时间片

     内存

          有CPU的MMU功能将内存真实的空间化成多个页框,然后内核给程序虚拟出内存空间.每个程序认为自己是独立占用内存,程序的真实数据

          有内核分配在物理内存的某个页框内,在物理内存中,同一个程序的页框可能不连续,由于程序看到的是虚拟内存空间,在虚拟内存空间,

          程序的具体占用页框是连续的。

有内核根据进程的优先级,来分别执行程序

          程序的虚拟内存空间

               32位CPU的寻址单元 2的32次方 =  4G空间

                    1G是内核占用,剩下3G由程序使用

程序知道内核的存在,需要和内核之间交互,如执行某些敏感指令或特权指令时,有内核代替程序去CPU中执行,并且将相关结果反馈给程序,程序继续执行

进程分两类:

     CPU密集型进程

     IO密集型进程

进程分三类

     批处理进程

     实时进程

     交互式进程

进程优先级

     动态优先级:

          优先级是由内核动态分配

     静态优先级

            100--139:数字越小优先级越小

         通过进程的nice值来调整进程的优先级

                         -20,19   nice取值范围

                         100,139

     实时优先级:

          1-99:数字越大优先级越大

Linux 2.6之后的内核使用O(1)的调度方式

     无论进程队列如果增长,都是一个长定值

          如级别0到级别139,共有140个级别

           每个级别会有好的进程,每次只需要

           执行第一排的0到139,每次只执行140个进程

            不管多少进程,选择进程的时间是恒定的

进程切换:上下文切换

保存现场:分配给某个进程时间片,时间片消耗完毕,进程没有执行结束,进程暂停,并保存进程的当时的状态,如打开了哪些文件,加载了哪些库等

恢复现场:将暂停的进程,有保存现场那一刻加载至CPU继续执行

抢占:一些特殊的进程,比较紧急,CPU会将正在执行的进程暂停,执行紧急的进程

IO交互:

     轮询执行

     中断执行

          有CPU的中断控制器,连接所有IO设备,如网卡有请求过来,中断控制器就知道是网卡的数据报文过来,然后让内核来处理

          中断的上半部:将中断先接进来,如果中断不是特别紧急,先将请求接近来,放在缓存中

          中断的下半步:处理中断的过程

进程的状态:

     Ready:进程已经准备完毕,等待加载至CPU执行

     Running:运行态

     Ready:时间片消耗完毕,但没有运行完,被切换出去

     Sleeping:运行过程中,在等待I/O的过程中被切换出去

         可中断睡眠:睡眠过程中可以唤醒,唤醒后继续执行

          非可中断睡眠:睡眠过程中不可唤醒,进程在等待I/O处理等 

     stopped:停止状态:内核不会主动唤醒,有用户手动唤醒

     Zombie:僵死态:子进程运行中,父进程结束,而子进程又无新的父进程,子进程就会变成非正常僵死状态

多线程:一个进程有多个执行流,让多个执行流同时执行.把指令分类,每一类是一个执行流,每一个执行流运行在一个CPU上

线程:一个进程可以分成多个执行单位,每一个执行单位可以在不同CPU上运行,这个执行单位就是进程的线程(进程的子单位,可以运行在不同的CPU上)

pstree:显示进程树

ps:显示系统当前的进程状态

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

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

STAT:进程状态

     S:可中断睡眠

     D:不可中断睡眠

     R:运行或可运行

     T:停止

     Z:僵死

     s:某进程的主要进程

     l:多线程进程

    +:前台进程

    N:低优先级进程

    <:高优先级进程

ps -aux

u:以用户为中心显示进程相关信息

     user:进程的属主

     PID:进程的ID号

     %cpu:CPU运行以来,进程占用的百分比

     %MEM:进程所占用内存的百分比

     VSZ:虚拟内存空间大小(线性地址空间),单位是KB

     RSS:进程占用固定内存(不可被交互至交互分区)的内存空间(KB)

     TTY:进程在那个终端上运行,如何终端无关显示?

     START:进程的启动时间

     TIME:该进程使用CPU的运行时间

     COMMAND:命令的名称

ps -ef 

     e:显示所有进程

     f:完整格式列表

          

          UID:进程是属主

          PID:进程的ID号

          PPID:进程的父进程号

          C:进程CPU利用率

          STIME:启动时间

          TTY:相关终端

          TIME:进程运行时间

          CMD:哪个命令启动的进程

-F:显示额外信息

-H:显示进程层次关系

-o 要显示的字段:自定义显示格式

    ps axo  pid,command

top:动态显示进程

第一行(CPU相关):系统时间,运行时长,当前登录的用户数,cpu的平均队列长度(1分钟平均,5分钟平均,15分钟平均)

top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载表示

系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。

      如果一个进程满足以下条件则其就会位于运行队列中:

- 它没有在等待I/O操作的结果

       - 它没有主动进入等待状态(也就是没有调用’wait’)

       - 没有被停止(例如:等待终止)

  Update:在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。当进程阻塞时,进程会等待I/O设备的数据或者系统调用。

  进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行running one和准备好运行runnable one的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。load average就是一定时间内的load平均数量。

  例如:

# uptime
   7:51pm up 2 days, 5:43, 2 users, load average: 8.13, 5.90, 4.94

 命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。

  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。

 在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出

第二行:进程数,运行状态,睡眠状态,停止状态,僵死状态

第三行(所有CPU的平均利用率,键盘1显示所有CPU平均值):用户空间占用比例,系统空间占用比例,调整nice值所占用的百分比,CPU空闲比例,等待IO完成所占用的比例,

硬件中断所占据的百分比,软中断占据的百分比,被虚拟机占用的百分比

PID:用户的进程号

USER:进程属主

PR:优先级

NI:nice值

VIRT:虚拟内存集(进程的虚拟内存空间大小)

RES:实际内存集(进程实际占用物理内存空间)

SHR:共享内存集(进程共享内存占用空间)

S:状态

%CPU:从上次更新,到现在进程占用CPU的百分比

%MEM:进程占据物理内存的百分比

TIME+:进程使用CPU时间总计(单位:百分之1秒)

COMMAND:由哪个命令启动的这个进程

-----------------------------------------------------------------------

M键:根据内存占用大小排序

P键:按CPU时间占用大小排序

T键:根据累计时间排序

k:杀死一个进程

     k 进程号

选项

     -d 数字:刷新延迟

     -b :批次显示

     -n 数字:指定批次显示的次数

-------------------------------------------------------------

htop:进化版top,用法和top类似

iotop:I/O统计工具 

vmstat: 3 5  

     procs

          r:运行队列长度:(正在运行或等待CPU时间片的进程个数)

          b:被阻塞(通常等待IO完成)的进程队列长度

     memory

          swpd:从物理内存交换至交换分区的内存数据量

          free:未使用的物理内存空间

          buff:buffer cache的空间大小:通常用来缓存写操作的相关数据

          cache:page cache的空间大小:通常来缓存读操作的相关数据

      swap     

          si:swap in:数据从物理内存调入交换分区的数据量

          so:swap out:数据从交换分区调入物理内存的数据量

     io

          bi:block in :从块设备读入的数据量(kb/s)

          bo:block out :保存在块设备的数据量(kb/s)

     systenm

          in:interruput;中断发生速率,通常意为每秒多少次中断请求发送;

          cs:通常意为每秒多少次上下文切换

     cpu

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

          sy: 内核所占用CPU时间的百分比

id:CPU空闲百分比

          wa:CPU用户等待IO完成的时间的百分比

          st:被虚拟化占用的CPU时间百分比

sar 

tsar:淘宝开源sar工具

dstat  更直观的显示

---------------------------------------------------------------

进程间通信:IPC

     共享内存:SHM

     信号:signal

     

kill -l 查看信号

       1:SIGHUP:让进程不用中止,而重读其配置文件

       2:SIGINT:中断正在运行的进程,相当于CTRL+C

       9:SIGKILL:杀死一个进程

       15:SIGTERM:终止一个进程 

kill -信号  PID

killall -信号  进程名

调整进程的nice值

     普通用户;调大数字,降低优先级

          -20 19

          100 139

        nice -n 数字值  命令

             nice -n -20 top

        renice 数字值 PID

               renice 0 PID

Linux作业控制

          前台:进程占据着终端:前台作业       

           后台:进程无需占用终端:后台作业

          

           jobs:查看后台正在运行的作业

     前台---->后台 :Ctrl+z

     后台----前台:fg 作业号

      bg 作业号:让进程在后台继续运行

      

进程启动时直接运行在后台

     命令 &

 终止作业

          kill %作业号

终端退出后,后台进程扔然可运行

 nohup 命令  &

 cat /proc/PID/maps

pmap  PID:查看进程运行的物理地址空间映射



本文出自 “悬剑” 博客,请务必保留此出处http://sublime.blog.51cto.com/8856101/1545065

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。