python3网络编程05-孤儿进程与僵尸进程


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

  • 孤儿进程会被系统指定进程收养,即系统进程会成为孤儿进程新的父进程。系统进程会自动处理孤儿进程退出状态
    僵尸进程 : 子进程先于父进程退出,父进程没有处理子进程的退出状态,此时子进程就会成为僵尸进程
  • 僵尸进程会滞留部分PCB信息在内存中,大量的僵尸进程会消耗系统的内存资源,所以要尽量避免僵尸进程产生
    如何避免僵尸进程产生
  • 父进程先退出
  • 父进程处理子进程退出状态
    pid,status = os.wait()
    功能 : 在父进程中阻塞等待处理子进程的退出
    返回值:pid 退出的那个子进程的PID号
    status 获取子进程的退出状态
    os.WEXITSTATUS(status)
    功能:获取原来退出状态
    pid,status = os.waitpid(pid,option)
    功能 : 在父进程中阻塞等待处理子进程的退出
    参数 : pid -1 表示等待任意子进程退出
    >0 表示等待对应PID号的子进程退出
    option 0 表示阻塞等待
    WNOHANG 表示非阻塞
    返回值:pid 退出的那个子进程的PID号
    status 子进程的退出状态

waitpid(-1,0) ===> wait()
创建二级子进程
父进程创建子进程等待子进程退出
子进程创建下一级子进程,然后立即退出
二级子进程成为孤儿,处理具体工作

multiprocessing 模块创建进程

  1. 需要将要做的事情封装成函数
  2. 使用multiprocessing提供的类Process创建进程对象
  3. 通过进程对象和Process初始化进程进行进程的设置,绑定函数
  4. 启动进程,会自动执行绑定的函数
  5. 完成进程的回收
    创建进程对象
    Def fun():
    pass
    p=multiprocessing.Process(target = fun)
    Process()
    功能: 创建进程对象
    参数: target : 要绑定的函数
    name : 给进程起的名称 (默认Process-1)
    args: 元组 用来给target函数位置传参
    kwargs : 字典 用来给target函数键值传参
    p.start()
    功能 : 启动进程 自动运行terget绑定函数。此时进程被创建
    p.join([timeout])
    功能: 阻塞等待子进程退出
    参数: 超时时间
  • 使用multiprocessing创建进程子进程同样复制父进程的全部内存空间,之后有自己独立的空间,执行上互不干扰
  • 子进程也是有自己特有的PID等资源
  • 如果不使用join回收可能会产生僵尸进程
  • 使用multiprocessing创建子进程,一般父进程功能就是创建子进程回收子进程,所有事件交给子进程完成

猜你喜欢

转载自blog.csdn.net/qq_34237321/article/details/84573730