网络:进程相关概念

1、程序

  是一个可执行文件,是静态的,占有磁盘,不占计算机的运行资源

2、进程

  【1】程序在计算机中的一次执行过程

  【2】进程是一个动态的过程,占有计算机资源,有一定的生命周期

  【注】同一个程序不同的运行过程是不同的进程。因为分配的资源和生命周期都不相同

3、进程特征

  【1】进程是操作系统分配资源的最小单元

  【2】每个进程拥有自己独立的运行空间 (虚拟内存空间)

  【3】进程之间运行相互独立互不影响

 

4、进程相关概念

  【1】cpu时间片

      如果一个进程占有cpu此时我们称为该进程占有cpu时间片。多个进程任务会轮流占有cpu时间片形成并发效果。

  【2】进程信息 (process)

      进程的ID、 进程占有内存的位置,创建时间,创建用户。。。

      PCB (进程控制块):进程创建后会自动在内存生产一个空间存放进程信息。

5、查看系统该进程信息

  PID(process ID) : 在操作系统中每个进程都有唯一的PID值,是由系统分配的。

  【ps -aux】

      ① 查看系统进程信息,linux终端下执行此命令

      ② STAT列表示进程状态

        D   等待态 ,阻塞 ,不可中断等待态

        S   等待态 ,睡眠 ,可中断等待态

        T   等待态, 暂停, 暂停执行

        R   运行态(就绪态)

        Z   僵尸 + 前台进程 (在终端运行)

        <   有较高优先级的进程

        N   较低优先级的进程

        s   会话组

        l    有进程连接

6、进程的创建流程

  【1】 用户启动一个程序或者调用接口发起进程创建 

  【2】 操作系统接收用户请求分配计算机资源创建进程 

  【3】操作系统将一定状态的进程提供给用户使用 

  【4】用户利用操作系统提供的进程完成任务

7、进程的状态

  【三态】

    【1】就绪态 : 进程具备执行条件,等待系统分配处理器 资源进入运行态

    【2】运行态 : 进程占有cpu处于运行状态

    【3】等待态 : 进程暂时不具备运行条件,需要阻塞等待

  【五态】

     (三态基础上增加新建和终止)

    【4】新建 : 创建一个新的进程,获取系统资源的过程

    【5】终止 : 进程执行结束,释放资源的过程

8、进程的优先级

  【top】

    ① 动态查看进程优先级,linux终端下执行此命令

    ② < > 进行翻页, q退出

    ③ 优先级的取值范围 : -20 ~~ 19, -20最高

    ④ 【nice】

        以指定的优先级运行一个程序

        nice -9 ./while.py 以9的优先级运行

        sudo nice --9 ./while.py 以-9优先级运行

9、父子进程

    【1】在系统中除了初始化进程每个进程都有一个父进程,可能有0个或多个子进程。由此形成进程间的父子关系。

    【2】便于进程管理,父进程发起创建子进程请求

    【3】查看进程树:

          pstree

    【4】查看父子进程PID 

          ps -ajx

10、父子进程区别

  【1】子进程会复制父进程全部内存空间包括代码段

  【2】子进程会从fork的下一句开始执行

  【3】父进程中fork返回值即为新创建子进程的PID号

  【4】父子进程不一定谁先执行,执行上互不干扰抢占时间片

  【5】使用if 语句结构使父子进程执行不同的代码几乎是fork创建进程的固定结构

  【6】在子进程中对变量等其他内容的修改,不会影响父进程中的内容

  【7】子进程虽然复制父进程内容,但是也有自己的特有属性特征。比如: PID号 PCB 内存区间等

  父子进程复制文件:https://www.cnblogs.com/longyuu/p/14249192.html

11、孤儿进程

  【1】当父进程先于子进程退出,此时子进程就会成 为孤儿进程。

  【2】孤儿进程会被系统指定进程收养,即系统进程会成为孤儿 进程新的父进程。系统进程会自动处理孤儿进程退出状态

12、僵尸进程

  【1】子进程先于父进程退出,父进程没有处理子进 程的退出状态,此时子进程就会成为僵尸进程

  【2】僵尸进程会滞留部分PCB信息在内存中,大量的僵尸进程会消耗系统的内存资源,所以要尽量避免僵尸进程产生

13、 如何避免僵尸进程产生

  【1】父进程先退出

  【2】父进程处理子进程退出状态

14、创建二级子进程

  【1】父进程创建子进程等待子进程退出

  【2】子进程创建下一级子进程,然后立即退出

  【3】二级子进程成为孤儿,处理具体工作

  二级子进程处理僵尸进程问题: 

#二级子进程处理僵尸问题

import os 
from time import sleep

def fun1():
    sleep(3)
    print("第一件事情")

def fun2():
    sleep(4)
    print("第二件事情")

pid = os.fork()

if pid < 0:
    print("create process failed")
elif pid == 0:
    #创建二级子进程
    pid1 = os.fork()
    if pid1 == 0:
        fun2() #执行fun2
    elif pid1 > 0:
        os._exit(0) #子进程退出
else:
    os.wait()
    fun1()
二级子进程处理僵尸进程

 15、进程的缺点

  进程在创建和销毁的过程中消耗的资源相对较多

16、进程池技术

  https://www.cnblogs.com/longyuu/p/14248591.html

 

  【1】产生原因 : 如果有大量的任务需要多进程完成,而任务周期又比较短且需要频繁创建。

          此时可能产生大量进程频繁创建销毁的情况,消耗计算机资源较大

  【2】使用方法 :

          ① 创建进程池,在池内放入适当数量的进程

          ② 将事件封装函数,放入到进程池

          ③ 事件不断运行,知道所有放入进程池事件运行完成

          ④ 关闭进程池,回收进程

17、注意

  【1】如果多个子进程拷贝同一个父进程中的对象,则多个子进程使用的是同一个对象(如文件对象,套接字,队列,管道。。。)

  【2】如果是在创建子进程后单独创建的对象,则多个子进程各不相同

18、进程间通信(IPC)

  由于进程间空间独立,资源无法共享,此时在进程间通信就需要专门的通信方法。

19、进程间通信方法 :

   管道

  消息队列

  共享内存

  信号

  信号量

  套接字

 

  

posted @ 2021-01-06 12:54  昱成  阅读(538)  评论(0编辑  收藏  举报