孤儿进程 : 当父进程先于子进程退出,此时子进程就会成 为孤儿进程。
* 孤儿进程会被系统指定进程收养,即系统进程会成为孤儿 进程新的父进程。系统进程会自动处理孤儿进程退出状态
僵尸进程 : 子进程先于父进程退出,父进程没有处理子进 程的退出状态,此时子进程就会成为僵尸进程
* 僵尸进程会滞留部分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. 完成进程的回收
创建进程对象
Process()
功能: 创建进程对象
参数: target : 要绑定的函数
name : 给进程起的名称 (默认Process-1)
args: 元组 用来给target函数位置传参
kwargs : 字典 用来给target函数键值传参
p.start()
功能 : 启动进程 自动运行terget绑定函数。此时进程被 创建
p.join([timeout])
功能: 阻塞等待子进程退出
参数: 超时时间
* 使用multiprocessing创建进程子进程同样复制父进程的全部内存空间,之后有自己独立的空间,执行上互不干扰
* 子进程也是有自己特有的PID等资源
* 如果不使用join回收可能会产生僵尸进程
* 使用multiprocessing创建子进程,一般父进程功能就是创建子进程回收子进程,所有事件交给子进程完成
作业 : 1.梳理 聊天室代码
2.对进程概念和创建过程巩固
3.加深对http协议的理解
4. 使用父子进程复制一个文件,分别复制文件的上半部分和下半部分到一个新的文件中。以字节区分