fork注意:
*进入阻塞态的进程一定会让出cpu时间片*各个进程在自己空间内对数据的操作不影响其他进程*父进程在执行fork之前开辟的空间子进程也会复制进程相关函数
os.getpid()
功能获取当前进程的PID号返回值:返回当前进程的PIDos.getppid()
功能;获取父进程的PID号返回值:返回父进程PIDos._exit(status)
功能:退出程序参数:整数 表示自定义的进程退出状态标识sys.exit([status])
功能:退出进程参数:整数 表示退出状态 默认为0 传一个字符串,则退出时会打印该字符串 孤儿进程和僵尸进程孤儿进程;父进程先于子进程退出,则子进程成为孤儿进程
*孤儿进程会被系统进程收养,此时系统进程就好成为该进程父进程
僵尸进程:子进程先于父进程退出,父进程没有处理子进程退出状态,此时子进程就会成为僵尸进程
*僵尸进程虽然结束但是会存留部分PCB在内存,大量的僵尸进程会占用内存资源
如何避免僵尸进程产生 *处理自己成退出状态 pid,status =os.wait() 功能;在父进程中阻塞等待子进程退出 返回值:pid 退出的子进程的PID status 子进程退出状态 pid,status =os.waitpid(pid,option) 功能;在父进程中等待子进程退出 参数:pid -1 表示等待任意子进程 >0 表示等待指定PID的子进程退出 option 0表示阻塞等待 WNOHANG 表示非阻塞 返回值:pid 退出的子进程的PID status 子进程的退出状态创建二级子进程
1.父进程创建子进程等待子进程退出 2.子进程创建二级子进程然后退出 3.二级子进程成为孤儿,和原来父进程各自执行任务