Linux进程管理

一:进程的概念

    1)进程:process,运行中的程序的一个副本的某部分,之所以说是副本的一部分是因为一个程序可以多个用户同时以不同格式运行,如两个用户都在运行ls,一个运行的是ls -h ,另一个运行的是ls -l,那么这两个用户运行的程序代码肯定是不一样的而且不是程序的所有代码;进程有生命周期;


    2)进程管理:主要为进程调度;内核为了管理进程需要存储正在运行中的进程的元数据,存储在内核的链表中,

其固定格式 为tast struct;多个进程的stask struct组成链表,task list


     3)进程的创建:进程创建:内核初始化完成后创建第一个进程init(也叫初始化进程),init进程创建完成意味着用户空间和内核空间也就创建好了,后续用户空间进程的所有管理工作就都由init来完成,但是init不能代替内核执行特权指令;当需要创建一个进程时它就照着自己的样子创建一个子进程或者它的子进程照着子进程自己的样子创建一个子进程,这样“子又生孙,孙又生子”创建进程;进程有父子关系,进程都由其父进程fork()并clone()自身而来,当父进程要创建子进程时就向核发起fork()系统调用,并把自身的数据clone()给子进程;


    4)进程销毁:父进程创建子进程只是为了让子进程在某一时刻帮助它完成某些任务,当子进程执行完任务并把执行结果返回给父进程后,子进程的使命就结束了,此时父进程还要负责销毁子进程;


    5)进程优先级:由于事件的紧急程度不同,进程是有优先级的;优先级有nice值;内核将待运行的

的进程根据优先级分为140个队列,然后每次挑选优先级最高的队列的首个进程运行;

        优先级从0-139,

0一般很少用,在内核启动init之前会启动0号进程,一旦init启动起来后0号进程就被终止了;

1-99:实时优先级;数字越大优先级越高,很少需要手动调整;

100-139:静态优先级;数字越小优先级越高,用户可调度的优先级;

nice值:nice值从-2019对应静态优先级100139;用户可以通过调整nice值来调整静态优先级;普通用户只能调高nice值来调低优先级,但是管理员通过调整nice既可以调低优先级也可以调高优先级;


6)进程的内存:为了完成现代操作系统多任务的管理内核把除了自身占用的内存外的剩余内存分为多个片段,一个片段大概4K大小,然后把这些片段分配给多个进程使用;每个进程分配到的片段实际上不一定都是连续的内存,但是内核通过一个中间层把这些不连续的片段虚拟成连续的内存再分配给进程,让每个进程以为自己都是在一段连续的内存上运行的;而且内核会让每个进程以为在内存上运行的只有内核和它自己以及它可以用的内存为除了内核自身占用的内存外的剩余内存,这就叫线性管理机制,进程以为可以用的内存即为进程的线性地址空间,进程实际使用的内存即为进程的物理地址空间,线性地址空间和物理地址空间有可能是离散对应的;每个进程把线性地址空间的低地址空间用于存放程序代码,再向上是初始化的变量和未被初始化的变量(在C语言中这些变量被自动赋值为0),再向上的一段离散空间是堆内存(用于存放数据),另一头高地址空间是栈内存(用于存放数据),随着进程的运行堆内存和栈内存是会不断朝着彼此的方向变大的直到两者碰头占满内存,此时内存空间就会出现不够用的情况;当内存不够用时内核就会根据LRU(最近最少使用算法)把某个时间段不运行部分进程的数据而非代码调到交换分区,当这些进程又需要运行时再把它们调回去;

   Page Frame: 一个页框,也即一个片段,用于存储页面数据;

   MMU:memory management unit,内存管理单元

Linux进程管理

7)进程间通信机制:IPC,Inter Process Communication,

       同一主机上进程间通信机制:

       signal:常见的

       shm: shared memory

       semerphor

       不同主机上进程间通信机制:

       rpc: remote procecure call,远程过程调用,基于socket的更高级机制;

       socket:任何两个进程间通信前都要各自打开一个socket的文件,一方不断的往文件中写数据,然后通过TCP连接传输到另一方的socket文件中,另一方不断的从文件中读数据,从而实现通信;通信结束后双方都要关闭socket文件;

8)抢占式多任务:Linux内核的多任务工作模式,任何一个进程当它要启动时发现别的进程在运行而自己的优先级更高,该进程不是上来直接抢占当前进程的运行时间而是内核会指定可抢占的时间点,到达抢占时间点时高优先级进程才可以抢占优先级的运行时间;

9)进程的类型:

守护进程: 在系统引导过程中启动的进程,跟终端无关的进程;

前台进程:也叫用户进程或交互式进程;通过终端启动的进程,跟终端相关的进程;  

   注意:也可把在前台启动的进程送往后台,以守护模式运行;


    10)进程状态:

运行态:running,内存有数据且被cpu调度运行的

就绪态:ready,内存有数据但未被cpu调度运行的;就绪态也叫睡眠态;

 睡眠态:

     浅度睡眠态:interruptable,也叫可中断睡眠态,因进程时间片耗尽而进入睡眠态;

     深度睡眠态:uninterruptable,也叫不可中断睡眠态,因进程需要通过磁盘I/O加载数据而进入睡眠态;此处的磁盘I/O分为两段,第一段从磁盘加载数据到内核内存,第二段从内核内存复制到进程内存;

暂停态:stopped,暂停于内存中,但不会被调度,除非手动启动之;

 僵死态:zombie,也叫退出态,形象的说就是一个进程使命结束自杀后至父进程来收尸之间的状态;

Linux进程管理


11)进程分类:

   CPU-Bound:cpu密集型进程,非交互式进程多是cpu密集型进程;

   IO-Bound:IO密集型进程,交互式进程多是IO密集型进程;

二 进程常见的基本命令

1)pstree命令

作用:display a tree of processes;

 注意:CentOS 56看到的顶级进程为init,而CentOS 7看到的顶级进程为systemd

Linux进程管理

Linux进程管理

2)ps命令

作用:ps – report a snapshot of the current processes.即查看在ps命令执行这一刻所有进程的状态;

/proc/:内核参数(即内核所管理的进程的状态信息)存放位置;内核参数也被模拟成文件,非参数本身被模拟成目录,参数本身被模拟成文件;每个进程在/proc/目录下都有一个进程号命名的目录/proc/PID,该目录中存放了当前进程的各种状态信息

启动进程的方式:

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

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

   ps选项有三种风格:

       UNIX:选项前必须由“-”引导;

       BSD:选项前必须不由“-”引导;    

       GNU:选项前必须由“–”引导;

          用法:ps [options]

        options:   

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

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

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

aux:常用组合之一;显示结果中相关字段的含义,如下;

Linux进程管理

       VSZ:虚拟内存集,即进程占用的虚拟内存(即线性地址空间)大小;因为多个进程会共享库,因此进程占用的线性地址空间和物理地址空间大小不一定一致,一般前者大于后者;

       RSS:常驻内存集;即进程中关键的、不能调到交换分区上的数据占用的内存集

       STAT:基于BSD风格进行描述的

           R:running,运行态

           S:interruptable sleeping,可中断睡眠

           D:uninterruptable sleeping,不可中断睡眠

           T:stopped,暂停态

           Z:zombie,僵死态

           +:前台进程

           l:多线程进程

           N:低优先级进程

           <:高优先级进程

           s:session leader ,会话主导者,例如shell进程会启动诸多子进程,此时shell进程就是会话主导者,shell进程挂了之后其子进程也随之不复存在;

   -e:显示所有进程,相当于ax

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

   -ef:常用组合之二;

Linux进程管理

       PPID:父进程的进程号

       C:cpu占用百分比

       STIME:启动的时间

       TTY:与哪个终端相关;

   -F:显示更详细的完整格式的进程信息;

       PSR:运行于哪颗CPU之上,从0开始编号;

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

   -eFH:常用组合之三;

   -eo,axo:常用组合之四;o一定要写在后面,因为它是要带参数的;

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

          常用的field:pid, ni, priority(不可简写为pri), psr, pcpu, stat, comm, tty, ppid, rtprio

              ni:nice值;

              priority:优先级;

              pcpu:cpu利用率

              rtprio:real time priority,实时优先级;

3)pgrep和pkill命令

作用:look up or signal processes based on name and other attributes

,过滤和关闭进程

   用法:pgrep [options] [pattern];pkill命令使用与pgrep类似;

   选项:

   -u uid:effective user,即以哪儿用户的身份运行的

   -U uid:read user,即以哪个用户的身份启动的

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

   -l:显示进程名;

   -a:显示完整格式的进程名,即显示进程名和它启动时的参数;

   -P pid:显示此进程的子进程的进程号,不包括其子进程的子进程;

Linux进程管理

4)pidof命令

作用:根据进程名取其pid;有的进程可能不只一个;

Linux进程管理

5)top命令

作用:display Linux processes,即动态的不断刷新的逆序的查看当前系统上所有进程的状态信息,类似于Windows中的任务管理器;top命令有很多交互式内建命令;

   选项:

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

   -b:以批次方式显示;

   -n #:显示多少批次;

   内建命令:

       排序:

       P命令:以占据CPU百分比排序;默认

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

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

       首部信息:

        第一行:uptime信息,键入l(L的小写)命令可关闭,再键入l(L的小写)命令可开启;

        第二、三行:tasks及cpu信息,键入t命令可关闭,再键入t命令可开启; 键入1(数字)命令分散显示每颗cpu的使用比率, 再键入1(数字)命令汇总显示cpu的使用比率;

        第四、五行:内存和交换内存信息,键入m命令可关闭,再键入m命令可开启;   

       退出命令:q或Ctrl+c

       修改刷新时间间隔:s

       终止指定的进程:k

Linux进程管理

    11:25:55-当前时间,3:26-总运行时长,31users-登录到当前系统的总用户数,load average:0.00 0.01 0.05-平均负载:过去1分钟、5分钟、15分钟的平均等待运行的队列长度,通常队列长度的总数量不能大于cpu的数量;

us-用户空间的进程占用cpu的百分比,sy-内核空间的内核占用的cpu的百分比,us和sy的比率一般7:3比较合理;ni-调整完nice值以后额外多占用的cpu百分比id-idle,cpu空闲百分比,wa-等待I/O完成占用的cpu百分比,hi-处理硬件中断占用的cpu百分比,si-处理软件中断占用的cpu百分比,st-被虚拟化程序偷走的cpu百分比;

buff/cache-缓冲和缓存占用的内存,但是这些内存是可以回收的,不算真正占用;

PID-进程idUSER-启动进程的用户,PR-进程优先级,NI-进程nice值,VIRT-进程虚拟内存集,RES-进程常驻内存集,SHR-进程共享内存空间,S-进程状态,%CPU-占用cpu百分比,%MEM-占用内存百分比,TIME+-累积时长,COMMAND-进程启动命令;在该页面键入大写PMT可调整排序关键字;

6)update命令

作用:显示系统时间、运行时长及平均负载

Linux进程管理

         7)vmstat命令        

            作用:report virtual memory statistics

           用法:vmstat  [options]  [delay [count]]

           选项:

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

    Linux进程管理

备注:上图参数详解,如下:

    procs:进程

    r:等待运行的进程的个数,即CPU上等待运行的任务的队列长度;

    b:处于不可中断睡眠态的进程个数,即被阻塞的任务队列的长度;

memory:内存

    swpd:交换内存使用总量;对于服务器而言能不用交换内存就不要用,因为交换内存性能跟内存的性能差的太多了;

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

    buffer:用于buffer的内存总量;

    cache:用于cache的内存总量;

swap:交换内存,如果si和so活动频繁就说明物理内存不足;

    si:换进,即数据进入swap的数据速率(kb/s)

    so:换出,即数据离开swap的数据速率 (kb/s)

io:

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

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

system:

    in:interrupts,中断速率;一般网络服务器的中断速率很频繁,网络数据到达、磁盘IO(硬中断)、用户模式转为内核模式(软中断)等等都会导致中断发生

    cs:context switch, 上下文切换(也叫任务切换或进程切换)的速率;

cpu :

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

    sy:内核空间的内核占用的cpu的百分比,us和sy的比率一般7:3比较合理;

    id:idle,cpu空闲百分比;

    wa:等待I/O完成占用的cpu百分比;

    st:被虚拟化程序偷走的cpu百分比;

8)kill命令

作用:terminate a process,实际是用于向进程发送信号,以实现对进程的管理;一般只有管理员能kill任何进程;

   用法:

       显示当前系统可用信号:kill -l [signal]    

   向进程发信号: kill  [-s signal|-SIGNAL]  pid…

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

   信号的数字标识;例如,1;

   信号的完整名称;例如,SIGHUP;

   信号的简写名称;例如,HUP

   常用信号:

   1)SIGHUP:无须关闭进程而让其重读配置文件,但是是向启动用户为root的主进程发送该信号才能生效;

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

   9SIGKILL:杀死运行中的进程,残忍杀死进程,会有损坏未正常关闭的文件等等各种问题,不建议使用;

   15)SIGTERM:终止运行中的进程,人道杀死进程;默认信号;

   18SIGCONT:将f   19SIGSTOP:将进程送往后台并停止进程;

Linux进程管理

9)killall命令

 作用:kill processes by name,根据进程名杀死与进程名相关的所有进程;

   用法:killall  [-SIGNAL]  program;因为杀死信号时默认信号,因此该信号可省;

Linux进程管理

Linux进程管理

    


原创文章,作者:xiangx,如若转载,请注明出处:http://www.178linux.com/71707

(0)
上一篇 2017-03-26 00:25
下一篇 2017-03-26 14:19

相关推荐

  • 马哥教育网络班21期-第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。     cp -R /etc/skel /home/tuser1     chmod g-rwx,o-r…

    Linux干货 2016-08-03
  • Week9’s homework

    Week9's homework 1、写一个脚本(1)判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin)(2)分别统计两类用户的个数;通过字符串比较来实现。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干货 2016-12-24
  • 利用keepalived实现nginx七层负载均衡器双主模型高可用集群

    nginx通过ngx_http_upstream_module可以实现七层http服务的负载均衡,同时还自带RS的健康监测功能,但是也有弊端,nginx负载均衡器如果发生故障则整个集群失效,此文通过keepalived构建nginx负载均衡器的高可用集群。 一、实验环境: 实验需要4台服务器: nginx负载均衡器1:192.168.11.100 nginx…

    2017-07-03
  • 第九周

    统计可登录shell与不能登陆shell的个数 2. 写一个脚本 3.写一个脚本    4、写一个脚本,完成如下功能 脚本能够接受一个参数。 (1) 如果参数1为quit,则显示退出脚本,并执行正常退出。 (2) 如果参数1为yes,则显示继续执行脚本。 (3) 否则,参数1为其它任意值,均执行非正常退出。    5、…

    Linux干货 2016-12-26
  • Linux程序包管理方式

    Linux程序包安装和管理方式共计三种:          一、[yum|dnf],通过官网或者其他开源网站提供的文件服务器,本机镜像源等途径进行安装。         二、rpm,通过官网或者其他开源网站通过…

    Linux干货 2016-08-29
  • Python from entry to abandon

          学习Linux已经有大致两周了,依然感觉到自己仍然在运维的大门外徘徊。于是我想要找到一个在Linux之外的业余方向,可以作为枯燥基础学习的调节。没过多久我就发现了Python可以 说是钦定的选择,它作为Linux的内置语言,传言风格简洁优美,功能强大。Python老生常谈的缺点是效率不高,哎,没办…

    Linux干货 2017-04-01

评论列表(1条)

  • cjx546953979
    cjx546953979 2017-06-21 13:49

    总结的很细致啊,赞