孤儿进程:
父进程先于子进程退出,此时子进程便为孤儿进程
孤儿进程会被系统指定的进程所“收养”,即该进程称为孤儿进程的新的父进程
在孤儿进程退出时,“继父”会进行处理,不会是其成为僵尸进程
僵尸进程:
子进程先于父进程退出,但是父进程没有处理子进程的退出状况,子进程就会变成僵尸进程。
僵尸进程会滞留PCB的部分信息在内存中
大量的僵尸进程会消耗系统资源,所以应该尽量避免僵尸进程的产生
如何避免僵尸进程的产生
1.让父进程先退出(不好控制)
2.让父进程处理子进程的退出
使用wait或者waitpid函数
os.wait()
功能:等待子进程的退出,进行处理
参数:无
返回值:一个元组,第一个值为退出的子进程pid
第二个值为子进程退出状态
使用信号处理
os.waitpid(pid,option)
功能:处理子进程的退出
参数 pid:-1 表示等待任意的子进程退出
>0 表示等待相应的pid号的子进程
option:0 表示阻塞等待
WNOHANG: 表示非阻塞等待,需要循环处理查看子进程的状态
返回值:同wait
3.创建二级子进程
父进程创建子进程后,等待子进程退出
子进程创建二级子进程后,马上退出,二级子进程成为孤儿进程
让父进程和二级子进程处理具体事件