在使用多进程的过程中,当子进程结束后,如果主进程不对子进程进行回收处理
子进程就会称为僵尸进程,当产生大量的僵尸进程的时候,就会占用计算机大量的资源
这时候就需要对僵尸进程进行处理:
处理方式:
1:
pid,status = os.wait()
功能:再父进程中阻塞等待处理子进程退出
返回值:pid退出的子进程的pid号
status 获取子进程退出状态
是一个阻塞函数,必须等子进程运行完后再运行父进程
2:
pid,status = os.waitpid(pid,option)
功能:再父进程中阻塞等待处理子进程退出
参数: pid -1表示等待任意子进程退出
>0 表示等待对应PID号的子进程退出
option 0 表示阻塞等待
WNOHANG 表示非阻塞
3:
让父进程先退出
1、父进程创建子进程等待子进程退出
2、子进程创建二级进程后立即退出
3、二级子进程成为孤儿,和原来的父进程各自执行事件
4:
最方便的最简洁的一种方法:
使用不同之间的进程通信函数:
异步信号通信:
signal.signal(signal.SIGCHLD,signal.SIG_IGN)
对接收到的信号进行处理:SIGCHLD表示子进程状态改变对父进程发出的信号,SIG_IGN 表示对接收到的信号进行忽略
在该状态下,调用的子进程将不会产生僵尸进程,子进程会被丢弃
被系统自动回收就不会产生僵尸进程
网友评论