进程(一)

*******************************Day04*******************************

一、本地套接字

1、linux文件类型:   ls -l查看
      b(块设备文件)  c(字符设备文件)  d(目录)     
      -(普通文件)      l(链接文件)        s(套接字文件) p(管道文件)
2、本地套接字作用:用于本地不同程序间进行通信
3、创建流程
     1、创建本地套接字
       sockfd = socket(AF_UNIX,SOCK_STREAM)
     2、绑定本地套接字文件
       * 选定文件位置和名称
       * sockfd.bind(path)
     3、监听 listen()
     4、消息收发, recv send
4、cookie
      os.path.exists(path)
        功能 : 判断一个文件是否存在
        参数 : 文件
        返回值 : 存在返回 True   不存在 False
5、os.remove()     os.unlink()
       功能 : 删除一个文件
       参数 : 要删除的文件

二、多任务编程

  1、意义: 充分利用计算机资源,提高程序的运行效率
   2、定义 : 通过应用程序利用计算机的多个核心达到同时执行多个任务的目的。一次提升高计算机运行效率
   3、实施方案 : 多进程编程   多线程编程
   4、并行:多个计算机核心在同时处理多个任务,这时多个任务之间是并行关系。
   5、并发:同时运行多个任务,内核在多个任务间不断切换,达到好像都在处理运行的效果。但实际一个时间点内核只能处理其中一个任务。

三、进程(process)

1、定义:程序在计算机中的一次运行过程
2、程序:是一个 可执行的文件,是静态的,占有磁盘空间,不占有计算机的运行资源
3、进程 : 进程是一个动态过程的描述,占有计算机的资源,有一定的生命周期

      * 同一个程序的不同运行过程是不同的进程。因为占用资源和生命周期都不相同。

4、进程的创建流程

    1、用户空间通过运行程序或者调用接口发起创建进程
     2、操作系统接收用户请求,开始创建进程
     3、操作系统分配计算机资源,确定进程状态,开辟进程空间等工作
     4、操作系统将创建好进程提供给应用程序使用

5、cpu时间片

    如果一个进程占有计算机核心,我们称为改进程占有计算机cpu时间片。
     * 多个任务之间是争夺cpu的关系
     * 谁占有cpu最终是操作系统决定

6、PCB (进程控制块):

    在内存中开辟的一块空间,用来记录进程的信息。
     * 进程控制块是操作系统查找识别进程的标志

7、查看系统进程信息: ps  -aux

   1、PID(process ID) : 在操作系统中每个进程都有一个唯一的ID号用来区别于其他进程。ID号由操作系统分配的,是一个大于0的整数。
     2、父子进程:在系统中除了初始化进程,每一个进程都有一个父进程。可能有0个或多个子进程。由此形成进程间的父子关系。
     3、查看进程树: pstree
     4、查看父子进程PID :ps  -ajx

8、进程的状态:

    1、三态:
       * 就绪态 :进程具备执行条件,等待系统分配处理器资源进入运行态
       * 运行态 :进程占有cpu处于运行状态
       * 等待态 :进程暂时不具备执行条件,阻塞等待满足条件后再执行
     2、五态:(三态基础上增加新建态,终止态)
       * 新建 :创建一个新的进程,获取系统资源的过程
       * 终止 :进程执行结束,资源释放回收的过程
     3、ps -aux  ---> STAT表示进程状态
        S  等待态 睡眠   可中断等待态
        D  等待态 阻塞   不可中断等待态
        T  等待态 暂停   暂停执行状态
        R  运行态(包含就绪态)
        Z  僵尸进程
       +  前台进程 (在终端运行)
        N  优先级较低的进程
        <  有较高优先级的进程
        s  会话组组长
        l  有子进程的

9、进程优先级

     1、作用:决定了一个进程的执行权限和占有资源的优先程度
    2、查看进程优先级
        top 动态查看系统中的进程优先级信息,用<  > 进行翻页  q退出
         取值范围  -20 -- 19     -20优先级最高
     3、使用以指定的优先级运行一个程序
         nice : 以指定的优先级运行一个程序
         e.g.  nice -9  ./while.py   以优先级9运行
                nice --9  ./while.py  以-9优先级运行

10、进程特征

     1、进程之间运行互不影响,各自独立运行
     2、进程是操作系统资源分配的最小单元
     3、每个进程空间独立,各自占有一定的虚拟内存(虚拟内存空间)

四、多进程编程

  1、import os
    pid = os.fork()
    功能: 创建新的进程
    参数:无
    返回值:失败:返回一个负数
               成功:在原有进程中返回新的进程的PID号
                        在新进程中返回0
    * 子进程会复制父进程全部代码段,包括fork之前产生的内存空间
    * 子进程从fork的下一句开始执行,与父进程互不干扰
    * 父子进程的执行顺序是不一定的,父子进程公用一个终端显示
    * 父子进程通常会根据fork返回值得差异选择执行不同的代码。所以if结构几乎是fork的固定搭配
    * 父子进程空间独立,操作的都是本空间的内容,互不影响
    * 子进程也有自己的特性,比如PID号,PCB,命令集等

五、进程相关函数

1、获取进程PID

     1、os.getpid()
        功能:获取当前进程的PID进程号
        返回值 :返回进程号
    2、os.getppid()
        功能:获取当前进程父进程的PID号
        返回值 : 返回父进程的PID号

2、进程退出

      1、os._exit(status)
        功能 : 退出一个进程
        参数 : 进程的退出状态  整数
      2、sys.exit([status])
        功能 :进程退出
        参数 :数字,表示退出状态,不写默认为0。(如果传入一个整数则同 _exit())
                 字符串,表示退出时打印的内容
        * sys.exit() 可以通过捕获 SystemExit异常阻止退出

六、孤儿进程

      父进程先于子进程退出,此时子进程就称为孤儿进程
     * 孤儿进程会被操作系统指定的进程收养,系统进程就成为孤儿进程新的父进程

七、僵尸进程

     子进程先于父进程退出,但是父进程没有处理子进程的退出状态,此时子进程就会成为僵尸进程
    * 僵尸进程会存留少量的PCB信息在内存中,大量的僵尸进程会消耗系统资源,应该避免僵尸进程的产生

八、如何避免僵尸进程产生:

1、父进程处理子进程退出状态   

   1、pid,status = so.wait()
       功能:在父进程中阻塞等待处理子进程退出
       返回值:pid    退出的子进程的PID号
                 status 获取子进程退出状态
       获取原来退出状态:os.WEXITSTATUS(status)    
  2、pid,status = os.waitpid(pid,option)
       功能:在父进程中阻塞等待处理子进程退出
       参数:pid    -1  表示等待任意子进程退出
                    >0  表示等待对应PID号的子进程退出
         option  0  表示阻塞等待
              WNOHANG  表示非阻塞
       返回值:pid     退出的那个子进程的PID号
               status  获取子进程的退出状态
       waitpid(-1,0)  ===>(等同于) wait()

2、父进程先退出

     1、父进程创建子进程等待子进程退出
     2、子进程创建二级子进程,然后立即退出
     3、二级子进程成为孤儿,和原来的父进程各自执行事件

九、要求:

  1.什么是进程,进程和程序的区别
  2.了解进程的特征和基本概念
  3.清楚进程的每种状态,以及状态之间的转换关系
  4.理解并发并行的区别
cookie:
   程序首行添加
   #!/usr/bin/python3
   修改程序权限添加可执行权限
   chmod 775 while.py
   可以直接指明路径执行
   ./while.py

总结:
   1.epoll模型 : 效率高 , 触发方式更多
   2.本地套接字  AF_UNIX  本地两个进程间的消息通信
   3.多任务编程
       * 并行 和 并发
       * 进程 和 线程
   4. 多进程编程
        时间片  PCB   PID  父子进程  优先级 进程特征
        进程状态: 就绪态  运行态  等待态
   5. ps -aux   ps  -ajx    pstree  top   nice
   6. os.fork()
   7. os.getpid()  os.getppid()
      os._exit()   sys.exit()
   8. 孤儿进程和僵尸进程

posted on 2018-10-12 12:04  破天荒的谎言、谈敷衍  阅读(241)  评论(0)    收藏  举报

导航