Linux基础知识_09 -- 进程管理

Linux基础知识_09 -- 进程管理,第1张

概述进程管理 1、 *** 作系统基础    调用:kernel通过给应用程序提供system call方式来提供硬件资源;       【注意:这个应用程序也包括库文件;】       库文件是运行在ring 0上的一段程序代码,不对客户直接提供应用;    中断、保护现场 2、进程运行原理(一个进程与多个进程)    一个进程:首先我们需要把硬盘中的程序代码加载到内存(复制),再将这段程序放到CPU上运算 进程管理
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          总结

以上是内存溢出为你收集整理的Linux基础知识_09 -- 进程管理全部内容,希望文章能够帮你解决Linux基础知识_09 -- 进程管理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1024335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存