zoukankan      html  css  js  c++  java
  • Linux进程管理

    进程管理

    1、操作系统基础

           调用:kernel通过给应用程序提供system call方式来提供硬件资源;

                  注意:这个应用程序也包括库文件;

                  库文件是运行在ring 0上的一段程序代码,不对客户直接提供应用;

           中断、保护现场

    2、进程运行原理(一个进程与多个进程)

           一个进程:首先我们需要把硬盘中的程序代码加载到内存(复制),再将这段程序放到CPU上运算,此时,这段程序就会去调用(也会自动生成)很多的进程;由这些进             程来完成程序所指定的任务;

           在这个过程当中:我们就需要解决数据输入与输出,还有存储的问题

                 

           (不讨论多核、CPU多线程的情况)

           多个进程:在电脑中一般都是存在多个进程的,而CPU却只有一个,我们就使用time space的方式来给进程分配固定的时间来运行;某个进程只能在轮到自己运行的时候           才会被放到CPU上执行,时间一到就会自动被踢下来,CPU则会执行下一个进程;

           问题:

           1、进程谁先谁后的问题?

                  进程优先级  

           2、如果进程没有运行完就被踢下来了怎么办?--解决数据存储的问题

           3、如果进程造反了怎么办?

    3、进程优先级

           0-139

                  0-99  实时进程   越大越优先

                  100-139  非实时进程  越小越优先

                  【特性:普通用户可以转让自己的优先级】

                             nice值:定义普通进程的优先级,-20 - 19

           轮了一圈以后怎么办?

                  在我们内存上,会提供一个空间;这个空间会专门用来存放运行过后的进程;

                  当所有的进程运行完成一遍有,这个空间,就会和原有空间对调;再提供给CPU读取;

                  一直轮换,知道进程运行完成;

    4、进程数据怎么办?

           1、程序数据

           2、输入数据输出数据(运行到一半留下的数据)

           3、进程元数据

           task struct 数据结构体:它定义了进程数据的存储格式;我们将进程数据,以及进程元数据存储tast struct中;这种结构下,方便CPU快速存储于读取;

           物理地址空间--线性地址空间

           进程在运行后的一些数据,通过线性地址对应的物理地址,存储到内存(页框page);MMU(内存管理单元)就是用来将不连续的物理地址转换为连续的线性地址;

                  这些分开的页框的数据又两种组织形式:1、链表型数据  2、双向链表

    5、如果进程造反了怎么办?

           linux结构下进程也是树形结构 -- pstree

           内核管理不会去直接管理;一般所有的进程都由上一级进程来管理--父子进程概念;

           最大的进程--init,有权限去管理所有的进程;

          

           正常情况:

           1、如何生成子进程

                  写实复制:

                  父进程在需要完成一项工作的时候自己无法完成,则需要生成对应的子进程来完成这项工作,并且把自己的内存空间中的数据复制一份交给子进程,用来存储子进程所运行数据;--这个过程我们就叫做写实复制;

           2、子进程完成任务以后,如果关闭

                  子进程任务完成,功成身退,交出所有的占用资源;再由父进程关闭子进程,这个周期就结束了;

    6、进程间的通讯原理

           1、主机内进程通讯 

                  single 信号通讯

                  共享内存

                  管道形式

           2、主机间的进程通讯

                  streams -- rpc

                  socket

    7、进程类型

           守护进程 -- 维护系统的正常运行

           普通进程 -- 提供应用

           另外一种分类方式:根据占用资源的不同

           占用CPU多进程  --  后台运行进程

           占用内存多的进程  --  前台要显示进程

    8、进程的状态

           进程和程序比较起来,进程是有生命周期的,他会死去;

           1、running 运行

           2、sleeping状态

           3、stop 停止状态

           4、zombie 僵死状态

           5、中断状态

          

    ==========================================================

    回顾:

           进程管理:

                  调用

                  内核空间 用户空间

           1个进程运行:

           多进程再单核单线程cpu上运行的情况:

                  cpu资源

                  1、谁先谁后?

                  2、数据存储的问题?

                         task struct

                         page -- 页框是一个虚拟概念,页框之间并不知道对方的存在,只知道自己独占内存空间

                  3、进程暴走了

                         父子进程的概念

                         写实复制

                  4、进程的分类、进程的通讯、进程状态

    ==========================================================

    进程管理的命令

           pstree

                  通过树形结构显示进程关系

                  yum install psmisc -y

           *ps

                  查看进程状态--当前运行状态;(这一刻)

                  PID  进程ID

                  TTY 启动该进程的终端是谁  pts

                  TIME      进程累计再CPU上运行的时长

                  CMD      启动该进程进程命令程序

                 

                  ps的常用组合:

                  ps -aux

                         USER      进程所属用户

                         PID

                         %CPU     

                         %MEM

                         VSZ virtual memory size 虚拟内存大小;进程自己再内存中真是占用的线性地址空间大小

                         RSS 常驻内空间(不可以进行内存交换 -- swap)

                         TTY

                         STAT      进程状态

                                R     running

                                S     sleeping

                                T     stoped

                                Z     zombie

                                附加状态

                                s      代表是lead进程--bash

                                +     前端进程

                                <     高优先级进程

                                N    低优先级进程

                                D     表示不可中断

                                W    没有足够的内存可以分配

                                l      表示多线程进程;多线程 -- 把一个进程拆分为多个线程来完成,这样提高进程运行速度

                         START    进程启动时间

                         TIME

                         COMMAND

                  ps -ef

                         PPID  父进程号

                         C       进程运行再那个CPU上

                  ps -ejH  

                         以树形结构显示进程

                  ps -eo

                         自定义参数格式

                         ps -eo uid,pid,comm  

                  ps -U

                         查看指定用户所运行的进程

                         ps -U root

           top

                  与ps相反,top实时状态,会动态刷新

                  k  --> 关闭进程  输入PID即可;

                  h  --> 帮助页面

                 

                  调整top排序:

                         M   根据内存大小进行排序

                         P    根据CPU利用率来进行排序

                         T    根据使用CPU累计时长来进行排序

                         N    根据PID来进行排序

                 

                  可以详细显示最上面的命令

                          1 2 3

           htop

                  top的高级版本,默认yum源中是没有的,需要去下载并编译安装使用  

           vmstat

                  查看虚拟机内存的相关信息

                         进程信息

                         内存信息

                         交换内存信息

                         system系统IO相关信息 -- in cs

                         cpu信息

                  -s   //以统计的形式来显示相关信息

           pmap

                  报告内存的映射信息

                  pmag pid

                  映射内存空间中的物理地址信息和CPU所能识别的线性地址信息;

           pidof

                  通过进程ID(UID)来查看进程号(PID)

                  pidof bash

           dstat

                  默认没有为我们安装上 yum install dstat

                  动态的显示各种信息,可以自己定义

                  建议:去man dstat

           kill

                  管理进程

                  通过kill对进行发送响应的操作信号

                         1信号  HUP  --  让进程重读配置文件,不重启进程

                         2信号  INT  -- 中断进程

                         9信号  KILL  -- 强制关闭进程,不去保存进程数据

                         15信号  TERM -- 优雅关闭

                  kill -l  //查看系统支持所有信号

                  kill -9 pid

           pgrep

                  进程过滤,也可以做进程查找--类似于pidof

           pkill

                  直接去关闭进程--可以按照UID(名字)来关闭进程

           jobs

                  作业: -- 进程

                  前台作业:占用了当前的shell界面

                  后台作业:在后台自动运行的进程

                 

                         ctrl + z

                         fg -- 切回到后台进程 : jobs -l  + -- 默认切回来的指定进程;

                         COM &  //脚本运行的时候

                         bg -- 将前端送到后台

                  vim a.txt

                  .swp

  • 相关阅读:
    IE8兼容
    游标
    WARN No appenders could be found for logger (org.springframework.orm.hibernate3.support.OpenSessionInViewFilter)
    sql server 备份数据
    JS页面打印
    jQuery Mobile 入门教程
    jquerymobile入门(文件引用+多页面)
    定位和可见性
    二月份总结
    mailto用法
  • 原文地址:https://www.cnblogs.com/baocx/p/11546930.html
Copyright © 2011-2022 走看看